Hmac_sha1算法

给你个js版本的  易语言调用

var CryptoJS = CryptoJS || (function (Math, undefined) {

var C = {};

var C_lib = C.lib = {};

var Base = C_lib.Base = (function () {

function F() {};

return {

extend: function (overrides) {

F.prototype = this;

var subtype = new F();

if (overrides) {

subtype.mixIn(overrides);

}

if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {

subtype.init = function () {

subtype.$super.init.apply(this, arguments);

};

}

subtype.init.prototype = subtype;

subtype.$super = this;

return subtype;

}, create: function () {

var instance = this.extend();

instance.init.apply(instance, arguments);

return instance;

}, init: function () {}, mixIn: function (properties) {

for (var propertyName in properties) {

if (properties.hasOwnProperty(propertyName)) {

this[propertyName] = properties[propertyName];

}

}

if (properties.hasOwnProperty('toString')) {

this.toString = properties.toString;

}

}, clone: function () {

return this.init.prototype.extend(this);

}

};

}());

var WordArray = C_lib.WordArray = Base.extend({

init: function (words, sigBytes) {

words = this.words = words || [];

if (sigBytes != undefined) {

this.sigBytes = sigBytes;

} else {

this.sigBytes = words.length * 4;

}

}, toString: function (encoder) {

return (encoder || Hex).stringify(this);

}, concat: function (wordArray) {

var thisWords = this.words;

var thatWords = wordArray.words;

var thisSigBytes = this.sigBytes;

var thatSigBytes = wordArray.sigBytes;

this.clamp();

if (thisSigBytes % 4) {

for (var i = 0; i < thatSigBytes; i++) {

var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;

thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);

}

} else if (thatWords.length > 0xffff) {

for (var i = 0; i < thatSigBytes; i += 4) {

thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];

}

} else {

thisWords.push.apply(thisWords, thatWords);

}

this.sigBytes += thatSigBytes;

return this;

}, clamp: function () {

var words = this.words;

var sigBytes = this.sigBytes;

words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);

words.length = Math.ceil(sigBytes / 4);

}, clone: function () {

var clone = Base.clone.call(this);

clone.words = this.words.slice(0);

return clone;

}, random: function (nBytes) {

var words = [];

var r = (function (m_w) {

var m_w = m_w;

var m_z = 0x3ade68b1;

var mask = 0xffffffff;

return function () {

m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;

m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;

var result = ((m_z << 0x10) + m_w) & mask;

result /= 0x100000000;

result += 0.5;

return result * (Math.random() > .5 ? 1 : -1);

}

});

for (var i = 0, rcache; i < nBytes; i += 4) {

var _r = r((rcache || Math.random()) * 0x100000000);

rcache = _r() * 0x3ade67b7;

words.push((_r() * 0x100000000) | 0);

}

return new WordArray.init(words, nBytes);

}

});

var C_enc = C.enc = {};

var Hex = C_enc.Hex = {

stringify: function (wordArray) {

var words = wordArray.words;

var sigBytes = wordArray.sigBytes;

var hexChars = [];

for (var i = 0; i < sigBytes; i++) {

var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;

hexChars.push((bite >>> 4).toString(16));

hexChars.push((bite & 0x0f).toString(16));

}

return hexChars.join('');

}, parse: function (hexStr) {

var hexStrLength = hexStr.length;

var words = [];

for (var i = 0; i < hexStrLength; i += 2) {

words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);

}

return new WordArray.init(words, hexStrLength / 2);

}

};

var Latin1 = C_enc.Latin1 = {

stringify: function (wordArray) {

var words = wordArray.words;

var sigBytes = wordArray.sigBytes;

var latin1Chars = [];

for (var i = 0; i < sigBytes; i++) {

var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;

latin1Chars.push(String.fromCharCode(bite));

}

return latin1Chars.join('');

}, parse: function (latin1Str) {

var latin1StrLength = latin1Str.length;

var words = [];

for (var i = 0; i < latin1StrLength; i++) {

words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);

}

return new WordArray.init(words, latin1StrLength);

}

};

var Utf8 = C_enc.Utf8 = {

stringify: function (wordArray) {

try {

return decodeURIComponent(escape(Latin1.stringify(wordArray)));

} catch (e) {

throw new Error('Malformed UTF-8 data');

}

}, parse: function (utf8Str) {

return Latin1.parse(unescape(encodeURIComponent(utf8Str)));

}

};

var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({

reset: function () {

this._data = new WordArray.init();

this._nDataBytes = 0;

}, _append: function (data) {

if (typeof data == 'string') {

data = Utf8.parse(data);

}

this._data.concat(data);

this._nDataBytes += data.sigBytes;

}, _process: function (doFlush) {

var data = this._data;

var dataWords = data.words;

var dataSigBytes = data.sigBytes;

var blockSize = this.blockSize;

var blockSizeBytes = blockSize * 4;

var nBlocksReady = dataSigBytes / blockSizeBytes;

if (doFlush) {

nBlocksReady = Math.ceil(nBlocksReady);

} else {

nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);

}

var nWordsReady = nBlocksReady * blockSize;

var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);

if (nWordsReady) {

for (var offset = 0; offset < nWordsReady; offset += blockSize) {

this._doProcessBlock(dataWords, offset);

}

var processedWords = dataWords.splice(0, nWordsReady);

data.sigBytes -= nBytesReady;

}

return new WordArray.init(processedWords, nBytesReady);

}, clone: function () {

var clone = Base.clone.call(this);

clone._data = this._data.clone();

return clone;

}, _minBufferSize: 0

});

var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({

*F: Base.extend(),

init: function (*F) {

this.*F = this.*F.extend(*F);

this.reset();

}, reset: function () {

BufferedBlockAlgorithm.reset.call(this);

this._doReset();

}, update: function (messageUpdate) {

this._append(messageUpdate);

this._process();

return this;

}, finalize: function (messageUpdate) {

if (messageUpdate) {

this._append(messageUpdate);

}

var hash = this._doFinalize();

return hash;

}, blockSize: 512 / 32,

_createHelper: function (hasher) {

return function (message, *F) {

return new hasher.init(*F).finalize(message);

};

}, _createHmacHelper: function (hasher) {

return function (message, key) {

return new C_algo.HMAC.init(hasher, key).finalize(message);

};

}

});

var C_algo = C.algo = {};

return C;

}(Math));

(function () {

var C = CryptoJS;

var C_lib = C.lib;

var Base = C_lib.Base;

var C_enc = C.enc;

var Utf8 = C_enc.Utf8;

var C_algo = C.algo;

var HMAC = C_algo.HMAC = Base.extend({

init: function (hasher, key) {

hasher = this._hasher = new hasher.init();

if (typeof key == 'string') {

key = Utf8.parse(key);

}

var hasherBlockSize = hasher.blockSize;

var hasherBlockSizeBytes = hasherBlockSize * 4;

if (key.sigBytes > hasherBlockSizeBytes) {

key = hasher.finalize(key);

}

key.clamp();

var oKey = this._oKey = key.clone();

var iKey = this._iKey = key.clone();

var oKeyWords = oKey.words;

var iKeyWords = iKey.words;

for (var i = 0; i < hasherBlockSize; i++) {

oKeyWords[i] ^= 0x5c5c5c5c;

iKeyWords[i] ^= 0x36363636;

}

oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;

this.reset();

}, reset: function () {

var hasher = this._hasher;

hasher.reset();

hasher.update(this._iKey);

}, update: function (messageUpdate) {

this._hasher.update(messageUpdate);

return this;

}, finalize: function (messageUpdate) {

var hasher = this._hasher;

var innerHash = hasher.finalize(messageUpdate);

hasher.reset();

var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));

return hmac;

}

});

}());

(function () {

var C = CryptoJS;

var C_lib = C.lib;

var WordArray = C_lib.WordArray;

var Hasher = C_lib.Hasher;

var C_algo = C.algo;

var W = [];

var SHA1 = C_algo.SHA1 = Hasher.extend({

_doReset: function () {

this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98bad*F, 0x10325476, 0xc3d2e1f0]);

}, _doProcessBlock: function (M, offset) {

var H = this._hash.words;

var a = H[0];

var b = H[1];

var c = H[2];

var d = H[3];

var e = H[4];

for (var i = 0; i < 80; i++) {

if (i < 16) {

W[i] = M[offset + i] | 0;

} else {

var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];

W[i] = (n << 1) | (n >>> 31);

}

var t = ((a << 5) | (a >>> 27)) + e + W[i];

if (i < 20) {

t += ((b & c) | (~b & d)) + 0x5a827999;

} else if (i < 40) {

t += (b ^ c ^ d) + 0x6ed9eba1;

} else if (i < 60) {

t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;

} else {

t += (b ^ c ^ d) - 0x359d3e2a;

}

e = d;

d = c;

c = (b << 30) | (b >>> 2);

b = a;

a = t;

}

H[0] = (H[0] + a) | 0;

H[1] = (H[1] + b) | 0;

H[2] = (H[2] + c) | 0;

H[3] = (H[3] + d) | 0;

H[4] = (H[4] + e) | 0;

}, _doFinalize: function () {

var data = this._data;

var dataWords = data.words;

var nBitsTotal = this._nDataBytes * 8;

var nBitsLeft = data.sigBytes * 8;

dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);

dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);

dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;

data.sigBytes = dataWords.length * 4;

this._process();

return this._hash;

}, clone: function () {

var clone = Hasher.clone.call(this);

clone._hash = this._hash.clone();

return clone;

}

});

C.SHA1 = Hasher._createHelper(SHA1);

C.HmacSHA1 = Hasher._createHmacHelper(SHA1);

}());

function HmacSHA1_Encrypt(word, key) {

return CryptoJS.HmacSHA1(word, key).toString();

}

php hmac,php hash_hmac函数相关推荐

  1. hash_hmac函数使用不当造成的安全问题

    2019独角兽企业重金招聘Python工程师标准>>> 近期有国外安全人员挖掘到api.wordpress.org的一个RCE漏洞,可以影响到远程更新的Wordpress网站.Wor ...

  2. php中使用hash_hmac函数实现HMAC-SHA1签名算法的来龙去脉

    前言 最近工作中频繁和其他部门甚至公司进行接口上的对接,不免接触到林林总总的签名验权算法.其中属HMAC-SHA1签名算法最多,刚开始接触的时候我也觉得有一点懵,慢慢搞清楚了原理,所以在这里跟大家如何 ...

  3. C#实现php的hash_hmac函数

    from:http://blog.csdn.net/ciaos/article/details/12618487 PHP代码示例如下 <?php $res1 = hash_hmac(" ...

  4. php 常用函数总结

    第1章 常用还是 1.1 特许用法 1.1.1 DIRECTORY_SEPARATOR=/: 1.1.2 错误提示: throw new Exception('Division by zero.'); ...

  5. php 内置函数大全

    https://www.cnblogs.com/zgxblog/p/10330808.html php内置函数大全 第2章 Apache函数 15 2.1 Apache信息获取类函数 15 2.1.1 ...

  6. php hmac,PHP安全:MAC和HMAC

    原标题:PHP安全:MAC和HMAC 消息认证码(Message Authentication Code,MAC)在发送消息的基础上通过Key生成加密摘要,通常被用于检测消息在传输过程中是否被篡改.M ...

  7. hmac sha256 php,PHP中的HMAC-SHA-256

    我必须从这个字符串构建一个autorisation哈希: kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9- ...

  8. 【密码学】HMAC与HS256算法

    HMAC算法 HMAC流程 HMAC以某种哈希算法为部件,全称是Hash-based Message Authentication Code 整体并不复杂,用公式表示就是: K为密钥 m是要认证的消息 ...

  9. 消息验证码 MAC (HMAC、CMAC) 原理、特点

    MAC学习笔记 1. MAC的基本思想 消息验证码,利用密钥来生成一个固定长度的短数据块,并将该数据块附加到消息之后.假定通信双方比如A和B,共享密钥K.若A和B发送消息时,则A计算MAC,它是消息和 ...

最新文章

  1. python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
  2. mysql单机多实例主从_【转载】MySQL单机多实例安装并配置主从复制
  3. mysql group by using filesort优化
  4. python sklearn.decomposition.PCA 主成分分析, 原理详解
  5. python-list:列表-元组-字符串
  6. java for遍历hashmap_Java 使用for和while循环遍历HashMap的方法及示例代码
  7. 批处理的高吞吐率和高延迟的解释
  8. tomcat 转发 http接口的绝对路径文件
  9. 因触屏故障 美国监管部门对15.9万辆特斯拉进行调查
  10. Job for slapd.service failed because the control process exited with error code. See systemctl stat
  11. Go语言中命令行参数的实现
  12. 网络编程之 信号捕捉器(函数指针与回调函数)
  13. [原创]Linux系统启动过程分析
  14. string和数值之间的转换
  15. 如何使用谷歌验证码 kaptcha,详细使用步骤
  16. 51单片机的红外接收解码
  17. 国产智多晶FPGA下载器(调试器)的驱动安装方法
  18. Linux系统安装Mediawiki
  19. python turtle 绘制北京天安门
  20. ES2015中let的暂时性死区(TDZ)

热门文章

  1. 看今年第一季度在线音频市场迅猛发展!
  2. 帮朋友刷赞——抓包并大批量使用shell脚本发送HTTP请求
  3. Java入门第82课——StringBuilder的append方法
  4. 360随身WiFi使用问题解决,无法在没有网络的电脑上使用
  5. 区别动态链接库和静态链接库
  6. 静态链接库(.lib)和动态链接库(.dll)的使用
  7. 6大行数字人民币推送子钱包扩大使用范围
  8. SQL、Hive场景题及答案
  9. Useful Blog
  10. 扫把和纸篓〖Max毛发练习〗