大佬教程收集整理的这篇文章主要介绍了Android HMAC-SHA1与标准Java HMAC-SHA1不同,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
String base_String = "This is a test String"; String key = "testKey"; try { Mac mac = Mac.geTinstance("HmacSHA1"); SecretKeySpec secret = new SecretKeySpec(key.getBytes("UTF-8"),mac.getAlgorithm()); mac.init(secret); byte[] digest = mac.doFinal(base_String.getBytes()); String enc = new String(digest); // Base 64 Encode the results String retVal = Base64.encodeBase64String(enc.getBytes()); Log.v(tag,"String: " + base_String); Log.v(tag,"key: " + key); Log.v(tag,"result: " + retVal); } catch (Exception E) { System.out.println(e.getmessage()); }
为了测试这段代码我用它创建了一个简单的标准Java程序(当然用System.out.println调用替换Log.v调用)@R_410_9447@比较android版本.在这两个实例中,我对base_String和key使用相同的测试值.
此外,我已经使用一些PHP函数和验证服务器(使用一些OAuth令牌)验证了标准Java的编码结果.代码在标准Java程序中运行良好,但它在Android程序中不起作用.我做了很多搜索,无法弄清楚出了什么问题.有没有人经历过这个?
以下是标准java和android的结果……
> Java(和PHP):fH / pz0J5XcPZH / d608zGSn7FKA =
> Android程序:fH /vv73vv709Ce / vXcPZH / vv73vv71PMxkP77 9FO / vQ ==
进一步研究一下,我确信它是hmac函数,而不是Base64编码,因为比较那些hmac值,Android版本有各种额外的空格和其他未知字符符号与Java程序相混淆.
任何帮助表示赞赏!
你在这里做什么?
String enc = new String(digest); // Base 64 Encode the results String retVal = Base64.encodeBase64String(enc.getBytes());
你转换字符串中的字节,然后再返回一个字节数组(然后你base-64编码).
相反,这样做:
String retVal = Base64.encodeBase64String(digest);
通常,如果您想要一个可移植的程序,永远不要使用String.getBytes()或new String(byte []).并且永远不要尝试将任意字节数组(之前不是字符串)转换为字符串(除了像Base64之类的东西).
以上是大佬教程为你收集整理的Android HMAC-SHA1与标准Java HMAC-SHA1不同全部内容,希望文章能够帮你解决Android HMAC-SHA1与标准Java HMAC-SHA1不同所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。