实现 JavaScript 哈希算法 包含 md5, sha1 sha256

在解ob混淆时 发现其中作者实现的几种哈希算法,觉得写的不错,遂拿来分享给大家

  • MD5算法
function hash_md5(_0x5be8e2) {
   
  function _0x3cf213(_0x5cf6ec, _0x3082d4) {
   
    return _0x5cf6ec << _0x3082d4 | _0x5cf6ec >>> 32 - _0x3082d4;
  }

  function _0xddae70(_0x4b1946, _0x17d389) {
   
    var _0x76617c, _0x352aac, _0x40ca4a, _0x1a2ac6, _0x2dec5e;

    _0x40ca4a = _0x4b1946 & 2147483648;
    _0x1a2ac6 = _0x17d389 & 2147483648;
    _0x76617c = _0x4b1946 & 1073741824;
    _0x352aac = _0x17d389 & 1073741824;
    _0x2dec5e = (_0x4b1946 & 1073741823) + (_0x17d389 & 1073741823);

    if (_0x76617c & _0x352aac) {
   
      return _0x2dec5e ^ 2147483648 ^ _0x40ca4a ^ _0x1a2ac6;
    }

    if (_0x76617c | _0x352aac) {
   
      if (_0x2dec5e & 1073741824) {
   
        return _0x2dec5e ^ 3221225472 ^ _0x40ca4a ^ _0x1a2ac6;
      } else {
   
        return _0x2dec5e ^ 1073741824 ^ _0x40ca4a ^ _0x1a2ac6;
      }
    } else {
   
      return _0x2dec5e ^ _0x40ca4a ^ _0x1a2ac6;
    }
  }

  function _0x372249(_0x17b477, _0x20dd3a, _0x4dfa35) {
   
    return _0x17b477 & _0x20dd3a | ~_0x17b477 & _0x4dfa35;
  }

  function _0x3dc6d8(_0xa646f1, _0x4f2fd7, _0x334ce6) {
   
    return _0xa646f1 & _0x334ce6 | _0x4f2fd7 & ~_0x334ce6;
  }

  function _0x24f9c0(_0x3ca345, _0xd8d8c, _0x94d61) {
   
    return _0x3ca345 ^ _0xd8d8c ^ _0x94d61;
  }

  function _0x25eadf(_0x2d3318, _0xb5857f, _0x1b78c5) {
   
    return _0xb5857f ^ (_0x2d3318 | ~_0x1b78c5);
  }

  function _0x5cae5b(_0x2fbeea, _0x1a7a0e, _0x1e5a2f, _0x4e87ae, _0x223501, _0x249dbe, _0x4ec635) {
   
    _0x2fbeea = _0xddae70(_0x2fbeea, _0xddae70(_0xddae70(_0x372249(_0x1a7a0e, _0x1e5a2f, _0x4e87ae), _0x223501), _0x4ec635));
    return _0xddae70(_0x3cf213(_0x2fbeea, _0x249dbe), _0x1a7a0e);
  }

  function _0x4f0089(_0x14d937, _0x50c518, _0x2514a7, _0x57fc4b, _0x1a65bb, _0x5b1767, _0x20bd1c) {
   
    _0x14d937 = _0xddae70(_0x14d937, _0xddae70(_0xddae70(_0x3dc6d8(_0x50c518, _0x2514a7, _0x57fc4b), _0x1a65bb), _0x20bd1c));
    return _0xddae70(_0x3cf213(_0x14d937, _0x5b1767), _0x50c518);
  }

  function _0x5de9ac(_0x1deb68, _0x507e39, _0x47c88e, _0x3bddb3, _0x356ea4, _0x1d353d, _0x500c58) {
   
    _0x1deb68 = _0xddae70(_0x1deb68, _0xddae70(_0xddae70(_0x24f9c0(_0x507e39, _0x47c88e, _0x3bddb3), _0x356ea4), _0x500c58));
    return _0xddae70(_0x3cf213(_0x1deb68, _0x1d353d), _0x507e39);
  }

  function _0x2a491e(_0x123286, _0x486d82, _0x2a9abe, _0x46e42a, _0x5eaf7b, _0x218304, _0x280dc5) {
   
    _0x123286 = _0xddae70(_0x123286, _0xddae70(_0xddae70(_0x25eadf(_0x486d82, _0x2a9abe, _0x46e42a), _0x5eaf7b), _0x280dc5));
    return _0xddae70(_0x3cf213(_0x123286, _0x218304), _0x486d82);
  }

  function _0x287e25(_0x48c126) {
   
    var _0x54922c;

    var _0x4279c6 = _0x48c126["length"];

    var _0x259ab1 = _0x4279c6 + 8;

    var _0x406afa = (_0x259ab1 - _0x259ab1 % 64) / 64;

    var _0x9f7ec5 = (_0x406afa + 1) * 16;

    var _0x342f97 = Array(_0x9f7ec5 - 1);

    var _0x38b512 = 0;
    var _0x40f4d5 = 0;

    while (_0x40f4d5 < _0x4279c6) {
   
      _0x54922c = (_0x40f4d5 - _0x40f4d5 % 4) / 4;
      _0x38b512 = _0x40f4d5 % 4 * 8;
      _0x342f97[_0x54922c] = _0x342f97[_0x54922c] | _0x48c126["charCodeAt"](_0x40f4d5) << _0x38b512;
      _0x40f4d5++;
    }

    _0x54922c = (_0x40f4d5 - _0x40f4d5 % 4) / 4;
    _0x38b512 = _0x40f4d5 % 4 * 8;
    _0x342f97[_0x54922c] = _0x342f97[_0x54922c] | 128 << _0x38b512;
    _0x342f97[_0x9f7ec5 - 2] = _0x4279c6 << 3;
    _0x342f97[_0x9f7ec5 - 1] = _0x4279c6 >>> 29;
    return _0x342f97;
  }

  function _0x4bb8aa(_0x40ee87) {
   
    var _0x3378db = "",
        _0x55812f = "",
        _0x17394a,
        _0x2fa3a0;

    for (_0x2fa3a0 = 0; _0x2fa3a0 <= 3; _0x2fa3a0++) {
   
      _0x17394a = _0x40ee87 >>> _0x2fa3a0 * 8 & 255;
      _0x55812f = "0" + _0x17394a["toString"](16);
      _0x3378db = _0x3378db + _0x55812f["substr"](_0x55812f["length"] - 2, 2);
    }

    return _0x3378db;
  }

  var _0x1c6a47 = Array();

  var _0x3f8a56, _0x3b159c, _0x361533, _0x230872, _0x66dec0, _0x28d15f, _0x9837f3, _0x58b681, _0x4da13c;

  var _0x2e0305 = 7,
      _0x1dcbf5 = 12,
      _0x44081a = 17,
      _0x216b87 = 22;
  var _0x1fa910 = 5,
      _0x554a21 = 9,
      _0x5002a0 = 14,
      _0x2d4422 = 20;
  var _0x51a028 = 4,
      _0x5a3a98 = 11,
      _0xc55ee0 = 16,
      _0x271aee = 23;
  var _0x463955 = 6,
      _0x25de8d = 10,
      _0x2a5661 = 15,
      _0x343fe8 = 21;
  _0x1c6a47 = _0x287e25(_0x5be8e2);
  _0x28d15f = 1732584193;
  _0x9837f3 = 4023233417;
  _0x58b681 = 2562383102;
  _0x4da13c = 271733878;

  for (_0x3f8a56 = 0; _0x3f8a56 < _0x1c6a47["length"]; _0x3f8a56 += 16) {
   
    _0x3b159c = _0x28d15f;
    _0x361533 = _0x9837f3;
    _0x230872 = _0x58b681;
    _0x66dec0 = _0x4da13c;
    _0x28d15f = _0x5cae5b(_0x28d15f, _0x9837f3, _0x58b681, _0x4da13c, _0x1c6a47[_0x3f8a56 + 0], _0x2e0305, 3614090360);
    _0x4da13c = _0x5cae5b(_0x4da13c, _0x28d15f, _0x9837f3, _0x58b681, _0x1c6a47[_0x3f8a56 + 1], _0x1dcbf5, 3905402710);
    _0x58b681 = _0x5cae5b(_0x58b681, _0x4da13c, _0x28d15f, _0x9837f3, _0x1c6a47[_0x3f8a56 + 2], _0x44081a, 606105819);
    _0x9837f3 = _0x5cae5b(_0x9837f3, _0x58b681, _0x4da13c, _0x28d15f, _0x1c6a47[_0x3f8a56 + 3], _0x216b87, 3250441966);
    _0x28d15f = _0x5cae5b(_0x28d15f, _0x9837f3, _0x58b681, _0x4da13c, _0x1c6a47[_0x3f8a56 + 4], _0x2e0305, 4118548399);
    _0x4da13c = _0x5cae5b(_0x4da13c, _0x28d15f, _0x9837f3, _0x58b681, _0x1c6a47[_0x3f8a56 + 5], _0x1dcbf5, 1200080426);
    _0x58b681 = _0x5cae5b(_0x58b681, _0x4da13c, _0x28d15f, _0x9837f3, _0x1c6a47[_0x3f8a56 + 6], _0x44081a, 2821735955);
    _0x9837f3 = _0x5cae5b(_0x9837f3, _0x58b681, _0x4da13c, _0x28d15f, _0x1c6a47[_0x3f8a56 + 7], _0x216b87, 4249261313);
    _0x28d15f = _0x5cae5b(_0x28d15f, _0x9837f3, _0x58b681, _0x4da13c, _0x1c6a47[_0x3f8a56 + 8], _0x2e0305, 1770035416);
    _0x4da13c = _0x5cae5b(_0x4da13c, _0x28d15f, _0x9837f3, _0x58b681, _0x1c6a47[_0x3f8a56 + 9], _0x1dcbf5, 2336552879);
    _0x58b681 = _0x5cae5b(_0x58b681, _0x4da13c, _0x28d15f, _0x9837f3, _0x1c6a47[_0x3f8a56 + 10], _0x44081a, 4294925233);
    _0x9837f3 = _0x5cae5b(_0x9837f3, _0x58b681, _0x4da13c, _0x28d15f, _0x1c6a47[_0x3f8a56 + 11], _0x216b87, 2304563134);
    _0x28d15f = _0x5cae5b(_0x28d15f, _0x9837f3, _0x58b681, _0x4da13c, _0x1c6a47[_0x3f8a56 + 12], _0x2e0305, 1804603682);
    _0x4da13c = _0x5cae5b(_0x4da13c, _0x28d15f, _0x9837f3, _0x58b681, _0x1c6a47[_0x3f8a56 + 13], _0x1dcbf5, 4254626195);
    _0x58b681 = _0x5cae5b(_0x58b681, _0x4da13c, _0x28d15f, _0x9837f3, _0x1c6a47[_0x3f8a56 + 14], _0x44081a, 2792965006);
    _0x9837f3 = _0x5cae5b(_0x9837f3, _0x58b681, _0x4da13c, _0x28d15f, _0x1c6a47[_0x3f8a56 &#
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值