本文主要是介绍Java Script 实现 Hmac-sha1 签名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
签名的概念
签名是一种用于网络信息防篡改的通用方法.
主要流程
通信双方事先约定好秘钥。
通信一方将通信的参数按照一定的规则生成一个字串,采用 sha1, hmac-sha1 算法,结合秘钥生成签名,将签名随着通信参数一同传给对方。
对方收到消息后,采用同样的方法生成签名,与传输过来的签名进行比对,相同才允许通信
由于秘钥只有通信双方知道,因此可以保证传输的信息不被篡改。
Hmac-sha1 函数
为了快速校验签名算法,写了一个用于测试的 java script demo,这里使用了 Google 的一个 js 加密算法库 CryptoJs (如源库无法打开,可以在 github 搜索,如 sytelus/CryptoJS) 里面实现一些通用的加密算法。
使用时,直接引入其中对应的方法文件即可,其余加密算法的文件不需要引入,该方法只提供了将二进制转换为 16 进制的内置方法,可以使用下面的函数做 16 进制到 base64 的转换
sha1_to_base64(CryptoJS.HmacSHA1(str, secret).toString(CryptoJS.enc.Hex));
function sha1_to_base64(sha1){var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var base64_rep = "";var cnt = 0;var bit_arr = 0;var bit_num = 0;for(var n = 0; n < sha1.length; ++n){if(sha1[n] >= 'A' && sha1[n] <= 'Z'){ascv = sha1.charCodeAt(n) - 55;}else if(sha1[n] >= 'a' && sha1[n] <= 'z'){ascv = sha1.charCodeAt(n) - 87;}else{ascv = sha1.charCodeAt(n) - 48;}bit_arr = (bit_arr << 4) | ascv;bit_num += 4;if(bit_num >= 6){bit_num -= 6;base64_rep += digits[bit_arr >>> bit_num];bit_arr &= ~(-1 << bit_num);}}if(bit_num > 0){bit_arr <<= 6 - bit_num;base64_rep += digits[bit_arr];}var padding = base64_rep.length % 4;if(padding > 0){for(var n = 0; n < 4 - padding; ++n){base64_rep += "=";}}return base64_rep;}
这篇关于Java Script 实现 Hmac-sha1 签名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!