如何解决如何按照RFC-4648在Java中将数字转换为base32
实际上,我正在尝试在我的应用中使用TOTP,并且Google Authenticator要求密钥为base32格式。这就是我试图将密钥转换为base32格式的原因
假设我有一个号码= 150820200825235。
This维基百科页面上说,RFC-4648是最常用的base32字母。
这是我的Java代码,试图将数字转换为以32为基数:
long key=150820200825235L;
String base32Key = Long.toString(key,32);
System.out.println(base32Key);
现在将其打印为输出:
495e87tgcj
它包含9个,根据RFC-4648无效。
如何在Java中按照RFC-4648转换为base32数字?
还有一件事,如果使用最广泛的Base32字母确实符合RFC-4648,那么为什么Java不默认支持它?还是我的理解/代码有问题?
解决方法
RFC-4648中定义的
“ Base32”是一种仅使用数字,大写字母和=
进行填充的ASCII文本中的二进制数据(“八进制的任意序列”)编码的方法。您可以在Apache Commons Codec library
如果您以150820200825235
之类的数字开头并将其转换为RFC 4648 base32,则首先需要确定如何将该数字转换为字节序列。
敌人示例,一种将long
值转换为字节的方法是使用DataOutputStream.writeLong
方法。此方法使用8个字节。使用此方法写入150820200825235L并在base32中对结果字节进行编码,即可得到AAAISK4QP3AZG===
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。