java – 如何将大字符串转换为十六进制,然后转换为字节?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何将大字符串转换为十六进制,然后转换为字节?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1701字,纯文字阅读大概需要3分钟。
内容图文
我使用手机并每天处理MEID号码.因此,我没有在线搜索MEID(长度为14的十六进制数)到伪ESN(长度为8的十六进制数)计算器,我想我可以创建自己的程序.从MEID获得pESN的方法在理论上相当简单.例如,给定MEID 0xA0000000002329,为了生成pESN,需要将SHA-1应用于MEID. A0000000002329上的SHA-1给出了e3be267a2cd5c861f3c7ea4224df829a3551f1ab.取这个结果的最后6个十六进制数,并将其追加到0x80 – 结果是0x8051F1AB.
现在这是我到目前为止的代码:
public void sha1() throws NoSuchAlgorithmException {
String hexMEID = "A0000000002329";
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(hexMEID.getBytes());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println(sb.toString());
}
问题是使用这种方法,A0000000002329上的SHA-1给出了a89b611b421f57705bd013297ce3fc835f706ab0而不是e3be267a2cd5c861f3c7ea4224df829a3551f1ab.我在这做错了什么?
有人给了我一个暗示“诀窍是将SHA-1应用于代表MEID的数字,而不是代表MEID的字符串.你需要逐字节处理它,所以你必须给它两个十六进制数字一次(因为两个十六进制数字形成一个字节)并确保它们被解释为数字而不是ASCII字符“.如果这是真的,那么如何将我的字符串更改为十六进制,然后更改为字节,以便SHA1可以给我正确的结果???
解决方法:
您可以使用以下两种方法
public static synchronized String bytesToHex(byte [] buf){
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10){
strbuf.append("0");
}
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
public synchronized static byte[] hexToBytes(String hexString) {
byte[] b = new BigInteger(hexString,16).toByteArray();
return b;
}
内容总结
以上是互联网集市为您收集整理的java – 如何将大字符串转换为十六进制,然后转换为字节?全部内容,希望文章能够帮你解决java – 如何将大字符串转换为十六进制,然后转换为字节?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。