crypto-js的HAMCSHA1加密与C#的区别

jerryfangsh 2011-11-22 05:20:42
在做一个WEB项目,浏览器端用HMACSHA1加密然后传给服务端,以保证客户端请求的有效性。

项目中浏览器端用了 crypto-js http://code.google.com/p/crypto-js/

服务端直接使用 System.Security.Cryptography.HMACSHA1

但是两者加密出来的结果不一致。

js的代码如下:

<script type="text/javascript" src="/Scripts/Crypto-JS/crypto-sha1-hmac/crypto-sha1-hmac.js"></script>
<script type="text/javascript">
var message = "test";
var key = "dddd";
var hmacBytes = Crypto.HMAC(Crypto.SHA1, message, key, { asBytes: true });
var hmacString = Crypto.util.bytesToBase64(hmacBytes);
</script>

C#的代码如下:

byte[] keys = Encoding.UTF8.GetBytes("ddd");
byte[] message = Encoding.UTF8.GetBytes("test");

System.Security.Cryptography.HMACSHA1 cryp = new System.Security.Cryptography.HMACSHA1(keys);
cryp.Initialize();
byte[] hashedbytes = cryp.ComputeHash(message);
string hashedstring = Convert.ToBase64String(hashedbytes);

最后两者得出结果完全不同。

请问他们的差别在哪里?

或者我的用法错了?
...全文
521 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerryfangsh 2011-11-23
  • 打赏
  • 举报
回复
我跟踪了Crypto-JS和C#对Key和Content生成byte[]的过程。两者最后生成的Key和Content的byte[]完全相同。

所以我觉得差别出现在两者的Hash过程中。由于我对算法的过程不是很了解,所以看不懂两者在Hash过程上的区别。

不过我也估计应该是在字符处理上的问题。

会不会是Javascript对字符的处理是单字节,而.net是双字节的问题?

如果是,怎么解决?
vrhero 2011-11-23
  • 打赏
  • 举报
回复
差别在key和content字符编码不同...HMACSHA1算法是国际标准,和编程语言无关...
jerryfangsh 2011-11-23
  • 打赏
  • 举报
回复
没人能解答?

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧