开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1637|回复: 4
收起左侧

[已解决] js 问题

 关闭 [复制链接]
结帖率:54% (14/26)
发表于 2018-12-28 23:15:58 | 显示全部楼层 |阅读模式   山东省聊城市
9精币
http://ss6.xxwmt.com/userLoginAction.do     请大神帮忙看下 这个js 怎么破呀  

补充内容 (2018-12-28 23:16):
就是密码的js

最佳答案

查看完整内容

如此,这般~

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值

发表于 2018-12-28 23:15:59 | 显示全部楼层   广东省广州市

如此,这般~

1 (22).e

123.68 KB, 下载次数: 1

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:100% (7/7)
发表于 2018-12-28 23:44:17 | 显示全部楼层   山东省烟台市
RSA加密,Key值是变的 ,我调试的时候写的死的
32323.png
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 13 天

发表于 2018-12-28 23:51:01 | 显示全部楼层   广东省广州市
  1. window = this;
  2. /*
  3. * RSA, a suite of routines for performing RSA public-key computations in JavaScript.
  4. * Copyright 1998-2005 David Shapiro.
  5. * Dave Shapiro
  6. * dave@ohdave.com
  7. * changed by Fuchun, 2010-05-06
  8. * fcrpg2005@gmail.com
  9. */

  10. (function($w) {

  11.     if (typeof $w.RSAUtils === 'undefined') var RSAUtils = $w.RSAUtils = {};

  12.     var biRadixBase = 2;
  13.     var biRadixBits = 16;
  14.     var bitsPerDigit = biRadixBits;
  15.     var biRadix = 1 << 16; // = 2^16 = 65536
  16.     var biHalfRadix = biRadix >>> 1;
  17.     var biRadixSquared = biRadix * biRadix;
  18.     var maxDigitVal = biRadix - 1;
  19.     var maxInteger = 9999999999999998;

  20.     //maxDigits:
  21.     //Change this to accommodate your largest number size. Use setMaxDigits()
  22.     //to change it!
  23.     //
  24.     //In general, if you're working with numbers of size N bits, you'll need 2*N
  25.     //bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need
  26.     //
  27.     //1024 * 2 / 16 = 128 digits of storage.
  28.     //
  29.     var maxDigits;
  30.     var ZERO_ARRAY;
  31.     var bigZero, bigOne;

  32.     var BigInt = $w.BigInt = function(flag) {
  33.         if (typeof flag == "boolean" && flag == true) {
  34.             this.digits = null;
  35.         } else {
  36.             this.digits = ZERO_ARRAY.slice(0);
  37.         }
  38.         this.isNeg = false;
  39.     };

  40.     RSAUtils.setMaxDigits = function(value) {
  41.         maxDigits = value;
  42.         ZERO_ARRAY = new Array(maxDigits);
  43.         for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;
  44.         bigZero = new BigInt();
  45.         bigOne = new BigInt();
  46.         bigOne.digits[0] = 1;
  47.     };
  48.     RSAUtils.setMaxDigits(20);

  49.     //The maximum number of digits in base 10 you can convert to an
  50.     //integer without JavaScript throwing up on you.
  51.     var dpl10 = 15;

  52.     RSAUtils.biFromNumber = function(i) {
  53.         var result = new BigInt();
  54.         result.isNeg = i < 0;
  55.         i = Math.abs(i);
  56.         var j = 0;
  57.         while (i > 0) {
  58.             result.digits[j++] = i & maxDigitVal;
  59.             i = Math.floor(i / biRadix);
  60.         }
  61.         return result;
  62.     };

  63.     //lr10 = 10 ^ dpl10
  64.     var lr10 = RSAUtils.biFromNumber(1000000000000000);

  65.     RSAUtils.biFromDecimal = function(s) {
  66.         var isNeg = s.charAt(0) == '-';
  67.         var i = isNeg ? 1 : 0;
  68.         var result;
  69.         // Skip leading zeros.
  70.         while (i < s.length && s.charAt(i) == '0')++i;
  71.         if (i == s.length) {
  72.             result = new BigInt();
  73.         } else {
  74.             var digitCount = s.length - i;
  75.             var fgl = digitCount % dpl10;
  76.             if (fgl == 0) fgl = dpl10;
  77.             result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)));
  78.             i += fgl;
  79.             while (i < s.length) {
  80.                 result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),
  81.                 RSAUtils.biFromNumber(Number(s.substr(i, dpl10))));
  82.                 i += dpl10;
  83.             }
  84.             result.isNeg = isNeg;
  85.         }
  86.         return result;
  87.     };

  88.     RSAUtils.biCopy = function(bi) {
  89.         var result = new BigInt(true);
  90.         result.digits = bi.digits.slice(0);
  91.         result.isNeg = bi.isNeg;
  92.         return result;
  93.     };

  94.     RSAUtils.reverseStr = function(s) {
  95.         var result = "";
  96.         for (var i = s.length - 1; i > -1; --i) {
  97.             result += s.charAt(i);
  98.         }
  99.         return result;
  100.     };

  101.     var hexatrigesimalToChar = [
  102.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  103.         'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
  104.         'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
  105.         'u', 'v', 'w', 'x', 'y', 'z'];

  106.     RSAUtils.biToString = function(x, radix) { // 2 <= radix <= 36
  107.         var b = new BigInt();
  108.         b.digits[0] = radix;
  109.         var qr = RSAUtils.biDivideModulo(x, b);
  110.         var result = hexatrigesimalToChar[qr[1].digits[0]];
  111.         while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
  112.             qr = RSAUtils.biDivideModulo(qr[0], b);
  113.             digit = qr[1].digits[0];
  114.             result += hexatrigesimalToChar[qr[1].digits[0]];
  115.         }
  116.         return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
  117.     };

  118.     RSAUtils.biToDecimal = function(x) {
  119.         var b = new BigInt();
  120.         b.digits[0] = 10;
  121.         var qr = RSAUtils.biDivideModulo(x, b);
  122.         var result = String(qr[1].digits[0]);
  123.         while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
  124.             qr = RSAUtils.biDivideModulo(qr[0], b);
  125.             result += String(qr[1].digits[0]);
  126.         }
  127.         return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
  128.     };

  129.     var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  130.         'a', 'b', 'c', 'd', 'e', 'f'];

  131.     RSAUtils.digitToHex = function(n) {
  132.         var mask = 0xf;
  133.         var result = "";
  134.         for (i = 0; i < 4; ++i) {
  135.             result += hexToChar[n & mask];
  136.             n >>>= 4;
  137.         }
  138.         return RSAUtils.reverseStr(result);
  139.     };

  140.     RSAUtils.biToHex = function(x) {
  141.         var result = "";
  142.         var n = RSAUtils.biHighIndex(x);
  143.         for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {
  144.             result += RSAUtils.digitToHex(x.digits[i]);
  145.         }
  146.         return result;
  147.     };

  148.     RSAUtils.charToHex = function(c) {
  149.         var ZERO = 48;
  150.         var NINE = ZERO + 9;
  151.         var littleA = 97;
  152.         var littleZ = littleA + 25;
  153.         var bigA = 65;
  154.         var bigZ = 65 + 25;
  155.         var result;

  156.         if (c >= ZERO && c <= NINE) {
  157.             result = c - ZERO;
  158.         } else if (c >= bigA && c <= bigZ) {
  159.             result = 10 + c - bigA;
  160.         } else if (c >= littleA && c <= littleZ) {
  161.             result = 10 + c - littleA;
  162.         } else {
  163.             result = 0;
  164.         }
  165.         return result;
  166.     };

  167.     RSAUtils.hexToDigit = function(s) {
  168.         var result = 0;
  169.         var sl = Math.min(s.length, 4);
  170.         for (var i = 0; i < sl; ++i) {
  171.             result <<= 4;
  172.             result |= RSAUtils.charToHex(s.charCodeAt(i));
  173.         }
  174.         return result;
  175.     };

  176.     RSAUtils.biFromHex = function(s) {
  177.         var result = new BigInt();
  178.         var sl = s.length;
  179.         for (var i = sl, j = 0; i > 0; i -= 4, ++j) {
  180.             result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));
  181.         }
  182.         return result;
  183.     };

  184.     RSAUtils.biFromString = function(s, radix) {
  185.         var isNeg = s.charAt(0) == '-';
  186.         var istop = isNeg ? 1 : 0;
  187.         var result = new BigInt();
  188.         var place = new BigInt();
  189.         place.digits[0] = 1; // radix^0
  190.         for (var i = s.length - 1; i >= istop; i--) {
  191.             var c = s.charCodeAt(i);
  192.             var digit = RSAUtils.charToHex(c);
  193.             var biDigit = RSAUtils.biMultiplyDigit(place, digit);
  194.             result = RSAUtils.biAdd(result, biDigit);
  195.             place = RSAUtils.biMultiplyDigit(place, radix);
  196.         }
  197.         result.isNeg = isNeg;
  198.         return result;
  199.     };

  200.     RSAUtils.biDump = function(b) {
  201.         return (b.isNeg ? "-" : "") + b.digits.join(" ");
  202.     };

  203.     RSAUtils.biAdd = function(x, y) {
  204.         var result;

  205.         if (x.isNeg != y.isNeg) {
  206.             y.isNeg = !y.isNeg;
  207.             result = RSAUtils.biSubtract(x, y);
  208.             y.isNeg = !y.isNeg;
  209.         } else {
  210.             result = new BigInt();
  211.             var c = 0;
  212.             var n;
  213.             for (var i = 0; i < x.digits.length; ++i) {
  214.                 n = x.digits[i] + y.digits[i] + c;
  215.                 result.digits[i] = n % biRadix;
  216.                 c = Number(n >= biRadix);
  217.             }
  218.             result.isNeg = x.isNeg;
  219.         }
  220.         return result;
  221.     };

  222.     RSAUtils.biSubtract = function(x, y) {
  223.         var result;
  224.         if (x.isNeg != y.isNeg) {
  225.             y.isNeg = !y.isNeg;
  226.             result = RSAUtils.biAdd(x, y);
  227.             y.isNeg = !y.isNeg;
  228.         } else {
  229.             result = new BigInt();
  230.             var n, c;
  231.             c = 0;
  232.             for (var i = 0; i < x.digits.length; ++i) {
  233.                 n = x.digits[i] - y.digits[i] + c;
  234.                 result.digits[i] = n % biRadix;
  235.                 // Stupid non-conforming modulus operation.
  236.                 if (result.digits[i] < 0) result.digits[i] += biRadix;
  237.                 c = 0 - Number(n < 0);
  238.             }
  239.             // Fix up the negative sign, if any.
  240.             if (c == -1) {
  241.                 c = 0;
  242.                 for (var i = 0; i < x.digits.length; ++i) {
  243.                     n = 0 - result.digits[i] + c;
  244.                     result.digits[i] = n % biRadix;
  245.                     // Stupid non-conforming modulus operation.
  246.                     if (result.digits[i] < 0) result.digits[i] += biRadix;
  247.                     c = 0 - Number(n < 0);
  248.                 }
  249.                 // Result is opposite sign of arguments.
  250.                 result.isNeg = !x.isNeg;
  251.             } else {
  252.                 // Result is same sign.
  253.                 result.isNeg = x.isNeg;
  254.             }
  255.         }
  256.         return result;
  257.     };

  258.     RSAUtils.biHighIndex = function(x) {
  259.         var result = x.digits.length - 1;
  260.         while (result > 0 && x.digits[result] == 0)--result;
  261.         return result;
  262.     };

  263.     RSAUtils.biNumBits = function(x) {
  264.         var n = RSAUtils.biHighIndex(x);
  265.         var d = x.digits[n];
  266.         var m = (n + 1) * bitsPerDigit;
  267.         var result;
  268.         for (result = m; result > m - bitsPerDigit; --result) {
  269.             if ((d & 0x8000) != 0) break;
  270.             d <<= 1;
  271.         }
  272.         return result;
  273.     };

  274.     RSAUtils.biMultiply = function(x, y) {
  275.         var result = new BigInt();
  276.         var c;
  277.         var n = RSAUtils.biHighIndex(x);
  278.         var t = RSAUtils.biHighIndex(y);
  279.         var u, uv, k;

  280.         for (var i = 0; i <= t; ++i) {
  281.             c = 0;
  282.             k = i;
  283.             for (j = 0; j <= n; ++j, ++k) {
  284.                 uv = result.digits[k] + x.digits[j] * y.digits[i] + c;
  285.                 result.digits[k] = uv & maxDigitVal;
  286.                 c = uv >>> biRadixBits;
  287.                 //c = Math.floor(uv / biRadix);
  288.             }
  289.             result.digits[i + n + 1] = c;
  290.         }
  291.         // Someone give me a logical xor, please.
  292.         result.isNeg = x.isNeg != y.isNeg;
  293.         return result;
  294.     };

  295.     RSAUtils.biMultiplyDigit = function(x, y) {
  296.         var n, c, uv;

  297.         result = new BigInt();
  298.         n = RSAUtils.biHighIndex(x);
  299.         c = 0;
  300.         for (var j = 0; j <= n; ++j) {
  301.             uv = result.digits[j] + x.digits[j] * y + c;
  302.             result.digits[j] = uv & maxDigitVal;
  303.             c = uv >>> biRadixBits;
  304.             //c = Math.floor(uv / biRadix);
  305.         }
  306.         result.digits[1 + n] = c;
  307.         return result;
  308.     };

  309.     RSAUtils.arrayCopy = function(src, srcStart, dest, destStart, n) {
  310.         var m = Math.min(srcStart + n, src.length);
  311.         for (var i = srcStart, j = destStart; i < m; ++i, ++j) {
  312.             dest[j] = src[i];
  313.         }
  314.     };

  315.     var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,
  316.     0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
  317.     0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF];

  318.     RSAUtils.biShiftLeft = function(x, n) {
  319.         var digitCount = Math.floor(n / bitsPerDigit);
  320.         var result = new BigInt();
  321.         RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,
  322.         result.digits.length - digitCount);
  323.         var bits = n % bitsPerDigit;
  324.         var rightBits = bitsPerDigit - bits;
  325.         for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {
  326.             result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) | ((result.digits[i1] & highBitMasks[bits]) >>> (rightBits));
  327.         }
  328.         result.digits[0] = ((result.digits[i] << bits) & maxDigitVal);
  329.         result.isNeg = x.isNeg;
  330.         return result;
  331.     };

  332.     var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
  333.     0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
  334.     0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF];

  335.     RSAUtils.biShiftRight = function(x, n) {
  336.         var digitCount = Math.floor(n / bitsPerDigit);
  337.         var result = new BigInt();
  338.         RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,
  339.         x.digits.length - digitCount);
  340.         var bits = n % bitsPerDigit;
  341.         var leftBits = bitsPerDigit - bits;
  342.         for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
  343.             result.digits[i] = (result.digits[i] >>> bits) | ((result.digits[i1] & lowBitMasks[bits]) << leftBits);
  344.         }
  345.         result.digits[result.digits.length - 1] >>>= bits;
  346.         result.isNeg = x.isNeg;
  347.         return result;
  348.     };

  349.     RSAUtils.biMultiplyByRadixPower = function(x, n) {
  350.         var result = new BigInt();
  351.         RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);
  352.         return result;
  353.     };

  354.     RSAUtils.biDivideByRadixPower = function(x, n) {
  355.         var result = new BigInt();
  356.         RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);
  357.         return result;
  358.     };

  359.     RSAUtils.biModuloByRadixPower = function(x, n) {
  360.         var result = new BigInt();
  361.         RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n);
  362.         return result;
  363.     };

  364.     RSAUtils.biCompare = function(x, y) {
  365.         if (x.isNeg != y.isNeg) {
  366.             return 1 - 2 * Number(x.isNeg);
  367.         }
  368.         for (var i = x.digits.length - 1; i >= 0; --i) {
  369.             if (x.digits[i] != y.digits[i]) {
  370.                 if (x.isNeg) {
  371.                     return 1 - 2 * Number(x.digits[i] > y.digits[i]);
  372.                 } else {
  373.                     return 1 - 2 * Number(x.digits[i] < y.digits[i]);
  374.                 }
  375.             }
  376.         }
  377.         return 0;
  378.     };

  379.     RSAUtils.biDivideModulo = function(x, y) {
  380.         var nb = RSAUtils.biNumBits(x);
  381.         var tb = RSAUtils.biNumBits(y);
  382.         var origYIsNeg = y.isNeg;
  383.         var q, r;
  384.         if (nb < tb) {
  385.             // |x| < |y|
  386.             if (x.isNeg) {
  387.                 q = RSAUtils.biCopy(bigOne);
  388.                 q.isNeg = !y.isNeg;
  389.                 x.isNeg = false;
  390.                 y.isNeg = false;
  391.                 r = biSubtract(y, x);
  392.                 // Restore signs, 'cause they're references.
  393.                 x.isNeg = true;
  394.                 y.isNeg = origYIsNeg;
  395.             } else {
  396.                 q = new BigInt();
  397.                 r = RSAUtils.biCopy(x);
  398.             }
  399.             return [q, r];
  400.         }

  401.         q = new BigInt();
  402.         r = x;

  403.         // Normalize Y.
  404.         var t = Math.ceil(tb / bitsPerDigit) - 1;
  405.         var lambda = 0;
  406.         while (y.digits[t] < biHalfRadix) {
  407.             y = RSAUtils.biShiftLeft(y, 1);
  408.             ++lambda;
  409.             ++tb;
  410.             t = Math.ceil(tb / bitsPerDigit) - 1;
  411.         }
  412.         // Shift r over to keep the quotient constant. We'll shift the
  413.         // remainder back at the end.
  414.         r = RSAUtils.biShiftLeft(r, lambda);
  415.         nb += lambda; // Update the bit count for x.
  416.         var n = Math.ceil(nb / bitsPerDigit) - 1;

  417.         var b = RSAUtils.biMultiplyByRadixPower(y, n - t);
  418.         while (RSAUtils.biCompare(r, b) != -1) {
  419.             ++q.digits[n - t];
  420.             r = RSAUtils.biSubtract(r, b);
  421.         }
  422.         for (var i = n; i > t; --i) {
  423.             var ri = (i >= r.digits.length) ? 0 : r.digits[i];
  424.             var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];
  425.             var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];
  426.             var yt = (t >= y.digits.length) ? 0 : y.digits[t];
  427.             var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];
  428.             if (ri == yt) {
  429.                 q.digits[i - t - 1] = maxDigitVal;
  430.             } else {
  431.                 q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);
  432.             }

  433.             var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);
  434.             var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);
  435.             while (c1 > c2) {
  436.                 --q.digits[i - t - 1];
  437.                 c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);
  438.                 c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);
  439.             }

  440.             b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1);
  441.             r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]));
  442.             if (r.isNeg) {
  443.                 r = RSAUtils.biAdd(r, b);
  444.                 --q.digits[i - t - 1];
  445.             }
  446.         }
  447.         r = RSAUtils.biShiftRight(r, lambda);
  448.         // Fiddle with the signs and stuff to make sure that 0 <= r < y.
  449.         q.isNeg = x.isNeg != origYIsNeg;
  450.         if (x.isNeg) {
  451.             if (origYIsNeg) {
  452.                 q = RSAUtils.biAdd(q, bigOne);
  453.             } else {
  454.                 q = RSAUtils.biSubtract(q, bigOne);
  455.             }
  456.             y = RSAUtils.biShiftRight(y, lambda);
  457.             r = RSAUtils.biSubtract(y, r);
  458.         }
  459.         // Check for the unbelievably stupid degenerate case of r == -0.
  460.         if (r.digits[0] == 0 && RSAUtils.biHighIndex(r) == 0) r.isNeg = false;

  461.         return [q, r];
  462.     };

  463.     RSAUtils.biDivide = function(x, y) {
  464.         return RSAUtils.biDivideModulo(x, y)[0];
  465.     };

  466.     RSAUtils.biModulo = function(x, y) {
  467.         return RSAUtils.biDivideModulo(x, y)[1];
  468.     };

  469.     RSAUtils.biMultiplyMod = function(x, y, m) {
  470.         return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m);
  471.     };

  472.     RSAUtils.biPow = function(x, y) {
  473.         var result = bigOne;
  474.         var a = x;
  475.         while (true) {
  476.             if ((y & 1) != 0) result = RSAUtils.biMultiply(result, a);
  477.             y >>= 1;
  478.             if (y == 0) break;
  479.             a = RSAUtils.biMultiply(a, a);
  480.         }
  481.         return result;
  482.     };

  483.     RSAUtils.biPowMod = function(x, y, m) {
  484.         var result = bigOne;
  485.         var a = x;
  486.         var k = y;
  487.         while (true) {
  488.             if ((k.digits[0] & 1) != 0) result = RSAUtils.biMultiplyMod(result, a, m);
  489.             k = RSAUtils.biShiftRight(k, 1);
  490.             if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
  491.             a = RSAUtils.biMultiplyMod(a, a, m);
  492.         }
  493.         return result;
  494.     };


  495.     $w.BarrettMu = function(m) {
  496.         this.modulus = RSAUtils.biCopy(m);
  497.         this.k = RSAUtils.biHighIndex(this.modulus) + 1;
  498.         var b2k = new BigInt();
  499.         b2k.digits[2 * this.k] = 1; // b2k = b^(2k)
  500.         this.mu = RSAUtils.biDivide(b2k, this.modulus);
  501.         this.bkplus1 = new BigInt();
  502.         this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1)
  503.         this.modulo = BarrettMu_modulo;
  504.         this.multiplyMod = BarrettMu_multiplyMod;
  505.         this.powMod = BarrettMu_powMod;
  506.     };

  507.     function BarrettMu_modulo(x) {
  508.         var $dmath = RSAUtils;
  509.         var q1 = $dmath.biDivideByRadixPower(x, this.k - 1);
  510.         var q2 = $dmath.biMultiply(q1, this.mu);
  511.         var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1);
  512.         var r1 = $dmath.biModuloByRadixPower(x, this.k + 1);
  513.         var r2term = $dmath.biMultiply(q3, this.modulus);
  514.         var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1);
  515.         var r = $dmath.biSubtract(r1, r2);
  516.         if (r.isNeg) {
  517.             r = $dmath.biAdd(r, this.bkplus1);
  518.         }
  519.         var rgtem = $dmath.biCompare(r, this.modulus) >= 0;
  520.         while (rgtem) {
  521.             r = $dmath.biSubtract(r, this.modulus);
  522.             rgtem = $dmath.biCompare(r, this.modulus) >= 0;
  523.         }
  524.         return r;
  525.     }

  526.     function BarrettMu_multiplyMod(x, y) {
  527.         /*
  528.         x = this.modulo(x);
  529.         y = this.modulo(y);
  530.         */
  531.         var xy = RSAUtils.biMultiply(x, y);
  532.         return this.modulo(xy);
  533.     }

  534.     function BarrettMu_powMod(x, y) {
  535.         var result = new BigInt();
  536.         result.digits[0] = 1;
  537.         var a = x;
  538.         var k = y;
  539.         while (true) {
  540.             if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);
  541.             k = RSAUtils.biShiftRight(k, 1);
  542.             if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
  543.             a = this.multiplyMod(a, a);
  544.         }
  545.         return result;
  546.     }

  547.     RSAUtils.encrypt = function(str, pwd) {
  548.         if (str == '') {
  549.             return '';
  550.         }
  551.         str = encodeURIComponent(str);
  552.         pwd = encodeURIComponent(pwd);
  553.         if (pwd == '' || pwd.length <= 0) {
  554.             return '';
  555.         }
  556.         var prand = '';
  557.         for (var i = 0, len = pwd.length; i < len; i += 1) {
  558.             prand += pwd.charCodeAt(i).toString();
  559.         }
  560.         var sPos = Math.floor(prand.length / 5);
  561.         var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
  562.         var incr = Math.ceil(pwd.length / 2);
  563.         var modu = Math.pow(2, 31) - 1;
  564.         if (mult < 2) {
  565.             return '';
  566.         }
  567.         var salt = Math.round(Math.random() * 1000000000) % 100000000;
  568.         prand += salt;
  569.         while (prand.length > 10) {
  570.             prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
  571.         }
  572.         prand = (mult * prand + incr) % modu;
  573.         var encChr = '';
  574.         var encStr = '';
  575.         for (var i = 0, len = str.length; i < len; i += 1) {
  576.             encChr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
  577.             if (encChr < 16) {
  578.                 encStr += '0' + encChr.toString(16);
  579.             } else {
  580.                 encStr += encChr.toString(16);
  581.             }
  582.             prand = (mult * prand + incr) % modu;
  583.         }
  584.         salt = salt.toString(16);
  585.         while (salt.length < 8) {
  586.             salt = "0" + salt;
  587.         }
  588.         encStr += salt;
  589.         return encStr;
  590.     }

  591.     RSAUtils.decrypt = function(str, pwd) {
  592.         if (str == '') {
  593.             return '';
  594.         }
  595.         pwd = encodeURIComponent(pwd);
  596.         if (str == undefined || str.length < 8) {
  597.             return '';
  598.         }
  599.         if (pwd == undefined || pwd.length <= 0) {
  600.             return '';
  601.         }
  602.         var prand = '';
  603.         for (var i = 0, len = pwd.length; i < len; i += 1) {
  604.             prand += pwd.charCodeAt(i).toString();
  605.         }
  606.         var sPos = Math.floor(prand.length / 5);
  607.         var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
  608.         var incr = Math.round(pwd.length / 2);
  609.         var modu = Math.pow(2, 31) - 1;
  610.         var salt = parseInt(str.substring(str.length - 8, str.length), 16);
  611.         str = str.substring(0, str.length - 8);
  612.         prand += salt;
  613.         while (prand.length > 10) {
  614.             prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
  615.         }
  616.         prand = (mult * prand + incr) % modu;
  617.         var encChr = '';
  618.         var encStr = '';
  619.         for (var i = 0, len = str.length; i < len; i += 2) {
  620.             encChr = parseInt(parseInt(str.substring(i, i + 2), 16) ^ Math.floor((prand / modu) * 255));
  621.             encStr += String.fromCharCode(encChr);
  622.             prand = (mult * prand + incr) % modu;
  623.         }
  624.         return decodeURIComponent(encStr);
  625.     }

  626.     var RSAKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
  627.         var $dmath = RSAUtils;
  628.         this.e = $dmath.biFromHex(encryptionExponent);
  629.         this.d = $dmath.biFromHex(decryptionExponent);
  630.         this.m = $dmath.biFromHex(modulus);
  631.         // We can do two bytes per digit, so
  632.         // chunkSize = 2 * (number of digits in modulus - 1).
  633.         // Since biHighIndex returns the high index, not the number of digits, 1 has
  634.         // already been subtracted.
  635.         this.chunkSize = 2 * $dmath.biHighIndex(this.m);
  636.         this.radix = 16;
  637.         this.barrett = new $w.BarrettMu(this.m);
  638.     };

  639.     RSAUtils.getKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
  640.         return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus);
  641.     };

  642.     if (typeof $w.twoDigit === 'undefined') {
  643.         $w.twoDigit = function(n) {
  644.             return (n < 10 ? "0" : "") + String(n);
  645.         };
  646.     }

  647.     // Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
  648.     // string after it has been converted to an array. This fixes an
  649.     // incompatibility with Flash MX's ActionScript.
  650.     RSAUtils.encryptedString = function(key, s) {
  651.         var a = [];
  652.         var sl = s.length;
  653.         var i = 0;
  654.         while (i < sl) {
  655.             a[i] = s.charCodeAt(i);
  656.             i++;
  657.         }

  658.         while (a.length % key.chunkSize != 0) {
  659.             a[i++] = 0;
  660.         }

  661.         var al = a.length;
  662.         var result = "";
  663.         var j, k, block;
  664.         for (i = 0; i < al; i += key.chunkSize) {
  665.             block = new BigInt();
  666.             j = 0;
  667.             for (k = i; k < i + key.chunkSize; ++j) {
  668.                 block.digits[j] = a[k++];
  669.                 block.digits[j] += a[k++] << 8;
  670.             }
  671.             var crypt = key.barrett.powMod(block, key.e);
  672.             var text = key.radix == 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix);
  673.             result += text + " ";
  674.         }
  675.         return result.substring(0, result.length - 1); // Remove last space.
  676.     };

  677.     RSAUtils.decryptedString = function(key, s) {
  678.         var blocks = s.split(" ");
  679.         var result = "";
  680.         var i, j, block;
  681.         for (i = 0; i < blocks.length; ++i) {
  682.             var bi;
  683.             if (key.radix == 16) {
  684.                 bi = RSAUtils.biFromHex(blocks[i]);
  685.             } else {
  686.                 bi = RSAUtils.biFromString(blocks[i], key.radix);
  687.             }
  688.             block = key.barrett.powMod(bi, key.d);
  689.             for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {
  690.                 result += String.fromCharCode(block.digits[j] & 255,
  691.                 block.digits[j] >> 8);
  692.             }
  693.         }
  694.         // Remove trailing null, if any.
  695.         if (result.charCodeAt(result.length - 1) == 0) {
  696.             result = result.substring(0, result.length - 1);
  697.         }
  698.         return result;
  699.     };

  700.     RSAUtils.setMaxDigits(130);

  701. })(window);

  702. function getpwd(pwd) {
  703.     RSAUtils.setMaxDigits(200);
  704.     //setMaxDigits(256);
  705.     var key = new RSAUtils.getKeyPair("10001", "", "924c62dccc19141fa180106f3408c8dfe05130a6030da43c98f5da745c6252b2a0cef487f3ecbad020ad084bdbf4c4fd2192e3ea9b32716da6ba5dd7ef82463eac23082fbf80aeab26524820464ae3142b5700dbd6c625297ff0503a39337969d9535e0c24142b2683d6069dbe2e216d62dccbace3e61e5fe6025b3271d1a70d");

  706.     Password = RSAUtils.encryptedString(key, pwd);
  707.     return Password
  708. }
复制代码
getpwd('111111')
回复

使用道具 举报

结帖率:84% (37/44)
发表于 2018-12-29 10:35:23 | 显示全部楼层   四川省南充市
  1. .版本 2

  2. .子程序 JS调试, 文本型, 公开, 代码由斌先森BY QQ:1240954871
  3. .参数 JS代码, 文本型
  4. .参数 函数名, 文本型
  5. .参数 参数, 文本型, 可空
  6. .局部变量 js, 对象
  7. .局部变量 return, 文本型

  8. ' CoInitialize (0) 线程中请初始化COM  否则会出错
  9. js.创建 (“ScriptControl”, )
  10. js.写属性 (“Language”, “JavaScript”)
  11. js.数值方法 (“AddCode”, JS代码)  ' 调试成功的JS代码段
  12. return = js.通用方法 (“eval”, 函数名 + “(” + 参数 + “)”).取文本 ()
  13. ' CoUninitialize ()
  14. 返回 (return)


  15. '本例程调用方法直接复制    JS调试 (调试成功的JS代码,"getpwd" ,"'666666'" )

  16. .子程序 __启动窗口_创建完毕

  17. 调试输出 (JS调试 (调试成功的JS代码,"getpwd" ,"'666666'" ))
复制代码



常量:window = this; (function($w) {
if (typeof $w.RSAUtils === 'undefined') var RSAUtils = $w.RSAUtils = {};
var biRadixBase = 2;
var biRadixBits = 16;
var bitsPerDigit = biRadixBits;
var biRadix = 1 << 16;
var biHalfRadix = biRadix >>> 1;
var biRadixSquared = biRadix * biRadix;
var maxDigitVal = biRadix - 1;
var maxInteger = 9999999999999998;
var maxDigits;
var ZERO_ARRAY;
var bigZero, bigOne;
var BigInt = $w.BigInt = function(flag) {
    if (typeof flag == "boolean" && flag == true) {
        this.digits = null;
    } else {
        this.digits = ZERO_ARRAY.slice(0);
    }
    this.isNeg = false;
};
RSAUtils.setMaxDigits = function(value) {
    maxDigits = value;
    ZERO_ARRAY = new Array(maxDigits);
    for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;
    bigZero = new BigInt();
    bigOne = new BigInt();
    bigOne.digits[0] = 1;
};
RSAUtils.setMaxDigits(20);
var dpl10 = 15;
RSAUtils.biFromNumber = function(i) {
    var result = new BigInt();
    result.isNeg = i < 0;
    i = Math.abs(i);
    var j = 0;
    while (i > 0) {
        result.digits[j++] = i & maxDigitVal;
        i = Math.floor(i / biRadix);
    }
    return result;
};
var lr10 = RSAUtils.biFromNumber(1000000000000000);
RSAUtils.biFromDecimal = function(s) {
    var isNeg = s.charAt(0) == '-';
    var i = isNeg ? 1 : 0;
    var result;
    while (i < s.length && s.charAt(i) == '0')++i;
    if (i == s.length) {
        result = new BigInt();
    } else {
        var digitCount = s.length - i;
        var fgl = digitCount % dpl10;
        if (fgl == 0) fgl = dpl10;
        result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)));
        i += fgl;
        while (i < s.length) {
            result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10), RSAUtils.biFromNumber(Number(s.substr(i, dpl10))));
            i += dpl10;
        }
        result.isNeg = isNeg;
    }
    return result;
};
RSAUtils.biCopy = function(bi) {
    var result = new BigInt(true);
    result.digits = bi.digits.slice(0);
    result.isNeg = bi.isNeg;
    return result;
};
RSAUtils.reverseStr = function(s) {
    var result = "";
    for (var i = s.length - 1; i > -1; --i) {
        result += s.charAt(i);
    }
    return result;
};
var hexatrigesimalToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
RSAUtils.biToString = function(x, radix) {
    var b = new BigInt();
    b.digits[0] = radix;
    var qr = RSAUtils.biDivideModulo(x, b);
    var result = hexatrigesimalToChar[qr[1].digits[0]];
    while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
        qr = RSAUtils.biDivideModulo(qr[0], b);
        digit = qr[1].digits[0];
        result += hexatrigesimalToChar[qr[1].digits[0]];
    }
    return (x.isNeg ? "-": "") + RSAUtils.reverseStr(result);
};
RSAUtils.biToDecimal = function(x) {
    var b = new BigInt();
    b.digits[0] = 10;
    var qr = RSAUtils.biDivideModulo(x, b);
    var result = String(qr[1].digits[0]);
    while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
        qr = RSAUtils.biDivideModulo(qr[0], b);
        result += String(qr[1].digits[0]);
    }
    return (x.isNeg ? "-": "") + RSAUtils.reverseStr(result);
};
var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
RSAUtils.digitToHex = function(n) {
    var mask = 0xf;
    var result = "";
    for (i = 0; i < 4; ++i) {
        result += hexToChar[n & mask];
        n >>>= 4;
    }
    return RSAUtils.reverseStr(result);
};
RSAUtils.biToHex = function(x) {
    var result = "";
    var n = RSAUtils.biHighIndex(x);
    for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {
        result += RSAUtils.digitToHex(x.digits);
    }
    return result;
};
RSAUtils.charToHex = function(c) {
    var ZERO = 48;
    var NINE = ZERO + 9;
    var littleA = 97;
    var littleZ = littleA + 25;
    var bigA = 65;
    var bigZ = 65 + 25;
    var result;
    if (c >= ZERO && c <= NINE) {
        result = c - ZERO;
    } else if (c >= bigA && c <= bigZ) {
        result = 10 + c - bigA;
    } else if (c >= littleA && c <= littleZ) {
        result = 10 + c - littleA;
    } else {
        result = 0;
    }
    return result;
};
RSAUtils.hexToDigit = function(s) {
    var result = 0;
    var sl = Math.min(s.length, 4);
    for (var i = 0; i < sl; ++i) {
        result <<= 4;
        result |= RSAUtils.charToHex(s.charCodeAt(i));
    }
    return result;
};
RSAUtils.biFromHex = function(s) {
    var result = new BigInt();
    var sl = s.length;
    for (var i = sl,
    j = 0; i > 0; i -= 4, ++j) {
        result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));
    }
    return result;
};
RSAUtils.biFromString = function(s, radix) {
    var isNeg = s.charAt(0) == '-';
    var istop = isNeg ? 1 : 0;
    var result = new BigInt();
    var place = new BigInt();
    place.digits[0] = 1;
    for (var i = s.length - 1; i >= istop; i--) {
        var c = s.charCodeAt(i);
        var digit = RSAUtils.charToHex(c);
        var biDigit = RSAUtils.biMultiplyDigit(place, digit);
        result = RSAUtils.biAdd(result, biDigit);
        place = RSAUtils.biMultiplyDigit(place, radix);
    }
    result.isNeg = isNeg;
    return result;
};
RSAUtils.biDump = function(b) {
    return (b.isNeg ? "-": "") + b.digits.join(" ");
};
RSAUtils.biAdd = function(x, y) {
    var result;
    if (x.isNeg != y.isNeg) {
        y.isNeg = !y.isNeg;
        result = RSAUtils.biSubtract(x, y);
        y.isNeg = !y.isNeg;
    } else {
        result = new BigInt();
        var c = 0;
        var n;
        for (var i = 0; i < x.digits.length; ++i) {
            n = x.digits + y.digits + c;
            result.digits = n % biRadix;
            c = Number(n >= biRadix);
        }
        result.isNeg = x.isNeg;
    }
    return result;
};
RSAUtils.biSubtract = function(x, y) {
    var result;
    if (x.isNeg != y.isNeg) {
        y.isNeg = !y.isNeg;
        result = RSAUtils.biAdd(x, y);
        y.isNeg = !y.isNeg;
    } else {
        result = new BigInt();
        var n, c;
        c = 0;
        for (var i = 0; i < x.digits.length; ++i) {
            n = x.digits - y.digits + c;
            result.digits = n % biRadix;
            if (result.digits < 0) result.digits += biRadix;
            c = 0 - Number(n < 0);
        }
        if (c == -1) {
            c = 0;
            for (var i = 0; i < x.digits.length; ++i) {
                n = 0 - result.digits + c;
                result.digits = n % biRadix;
                if (result.digits < 0) result.digits += biRadix;
                c = 0 - Number(n < 0);
            }
            result.isNeg = !x.isNeg;
        } else {
            result.isNeg = x.isNeg;
        }
    }
    return result;
};
RSAUtils.biHighIndex = function(x) {
    var result = x.digits.length - 1;
    while (result > 0 && x.digits[result] == 0)--result;
    return result;
};
RSAUtils.biNumBits = function(x) {
    var n = RSAUtils.biHighIndex(x);
    var d = x.digits[n];
    var m = (n + 1) * bitsPerDigit;
    var result;
    for (result = m; result > m - bitsPerDigit; --result) {
        if ((d & 0x8000) != 0) break;
        d <<= 1;
    }
    return result;
};
RSAUtils.biMultiply = function(x, y) {
    var result = new BigInt();
    var c;
    var n = RSAUtils.biHighIndex(x);
    var t = RSAUtils.biHighIndex(y);
    var u, uv, k;
    for (var i = 0; i <= t; ++i) {
        c = 0;
        k = i;
        for (j = 0; j <= n; ++j, ++k) {
            uv = result.digits[k] + x.digits[j] * y.digits + c;
            result.digits[k] = uv & maxDigitVal;
            c = uv >>> biRadixBits;
        }
        result.digits[i + n + 1] = c;
    }
    result.isNeg = x.isNeg != y.isNeg;
    return result;
};
RSAUtils.biMultiplyDigit = function(x, y) {
    var n, c, uv;
    result = new BigInt();
    n = RSAUtils.biHighIndex(x);
    c = 0;
    for (var j = 0; j <= n; ++j) {
        uv = result.digits[j] + x.digits[j] * y + c;
        result.digits[j] = uv & maxDigitVal;
        c = uv >>> biRadixBits;
    }
    result.digits[1 + n] = c;
    return result;
};
RSAUtils.arrayCopy = function(src, srcStart, dest, destStart, n) {
    var m = Math.min(srcStart + n, src.length);
    for (var i = srcStart,
    j = destStart; i < m; ++i, ++j) {
        dest[j] = src;
    }
};
var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF];
RSAUtils.biShiftLeft = function(x, n) {
    var digitCount = Math.floor(n / bitsPerDigit);
    var result = new BigInt();
    RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount, result.digits.length - digitCount);
    var bits = n % bitsPerDigit;
    var rightBits = bitsPerDigit - bits;
    for (var i = result.digits.length - 1,
    i1 = i - 1; i > 0; --i, --i1) {
        result.digits = ((result.digits << bits) & maxDigitVal) | ((result.digits[i1] & highBitMasks[bits]) >>> (rightBits));
    }
    result.digits[0] = ((result.digits << bits) & maxDigitVal);
    result.isNeg = x.isNeg;
    return result;
};
var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF];
RSAUtils.biShiftRight = function(x, n) {
    var digitCount = Math.floor(n / bitsPerDigit);
    var result = new BigInt();
    RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0, x.digits.length - digitCount);
    var bits = n % bitsPerDigit;
    var leftBits = bitsPerDigit - bits;
    for (var i = 0,
    i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
        result.digits = (result.digits >>> bits) | ((result.digits[i1] & lowBitMasks[bits]) << leftBits);
    }
    result.digits[result.digits.length - 1] >>>= bits;
    result.isNeg = x.isNeg;
    return result;
};
RSAUtils.biMultiplyByRadixPower = function(x, n) {
    var result = new BigInt();
    RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);
    return result;
};
RSAUtils.biDivideByRadixPower = function(x, n) {
    var result = new BigInt();
    RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);
    return result;
};
RSAUtils.biModuloByRadixPower = function(x, n) {
    var result = new BigInt();
    RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n);
    return result;
};
RSAUtils.biCompare = function(x, y) {
    if (x.isNeg != y.isNeg) {
        return 1 - 2 * Number(x.isNeg);
    }
    for (var i = x.digits.length - 1; i >= 0; --i) {
        if (x.digits != y.digits) {
            if (x.isNeg) {
                return 1 - 2 * Number(x.digits > y.digits);
            } else {
                return 1 - 2 * Number(x.digits < y.digits);
            }
        }
    }
    return 0;
};
RSAUtils.biDivideModulo = function(x, y) {
    var nb = RSAUtils.biNumBits(x);
    var tb = RSAUtils.biNumBits(y);
    var origYIsNeg = y.isNeg;
    var q, r;
    if (nb < tb) {
        if (x.isNeg) {
            q = RSAUtils.biCopy(bigOne);
            q.isNeg = !y.isNeg;
            x.isNeg = false;
            y.isNeg = false;
            r = biSubtract(y, x);
            x.isNeg = true;
            y.isNeg = origYIsNeg;
        } else {
            q = new BigInt();
            r = RSAUtils.biCopy(x);
        }
        return [q, r];
    }
    q = new BigInt();
    r = x;
    var t = Math.ceil(tb / bitsPerDigit) - 1;
    var lambda = 0;
    while (y.digits[t] < biHalfRadix) {
        y = RSAUtils.biShiftLeft(y, 1); ++lambda; ++tb;
        t = Math.ceil(tb / bitsPerDigit) - 1;
    }
    r = RSAUtils.biShiftLeft(r, lambda);
    nb += lambda;
    var n = Math.ceil(nb / bitsPerDigit) - 1;
    var b = RSAUtils.biMultiplyByRadixPower(y, n - t);
    while (RSAUtils.biCompare(r, b) != -1) {++q.digits[n - t];
        r = RSAUtils.biSubtract(r, b);
    }
    for (var i = n; i > t; --i) {
        var ri = (i >= r.digits.length) ? 0 : r.digits;
        var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];
        var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];
        var yt = (t >= y.digits.length) ? 0 : y.digits[t];
        var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];
        if (ri == yt) {
            q.digits[i - t - 1] = maxDigitVal;
        } else {
            q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);
        }
        var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);
        var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);
        while (c1 > c2) {--q.digits[i - t - 1];
            c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);
            c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);
        }
        b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1);
        r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]));
        if (r.isNeg) {
            r = RSAUtils.biAdd(r, b); --q.digits[i - t - 1];
        }
    }
    r = RSAUtils.biShiftRight(r, lambda);
    q.isNeg = x.isNeg != origYIsNeg;
    if (x.isNeg) {
        if (origYIsNeg) {
            q = RSAUtils.biAdd(q, bigOne);
        } else {
            q = RSAUtils.biSubtract(q, bigOne);
        }
        y = RSAUtils.biShiftRight(y, lambda);
        r = RSAUtils.biSubtract(y, r);
    }
    if (r.digits[0] == 0 && RSAUtils.biHighIndex(r) == 0) r.isNeg = false;
    return [q, r];
};
RSAUtils.biDivide = function(x, y) {
    return RSAUtils.biDivideModulo(x, y)[0];
};
RSAUtils.biModulo = function(x, y) {
    return RSAUtils.biDivideModulo(x, y)[1];
};
RSAUtils.biMultiplyMod = function(x, y, m) {
    return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m);
};
RSAUtils.biPow = function(x, y) {
    var result = bigOne;
    var a = x;
    while (true) {
        if ((y & 1) != 0) result = RSAUtils.biMultiply(result, a);
        y >>= 1;
        if (y == 0) break;
        a = RSAUtils.biMultiply(a, a);
    }
    return result;
};
RSAUtils.biPowMod = function(x, y, m) {
    var result = bigOne;
    var a = x;
    var k = y;
    while (true) {
        if ((k.digits[0] & 1) != 0) result = RSAUtils.biMultiplyMod(result, a, m);
        k = RSAUtils.biShiftRight(k, 1);
        if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
        a = RSAUtils.biMultiplyMod(a, a, m);
    }
    return result;
};
$w.BarrettMu = function(m) {
    this.modulus = RSAUtils.biCopy(m);
    this.k = RSAUtils.biHighIndex(this.modulus) + 1;
    var b2k = new BigInt();
    b2k.digits[2 * this.k] = 1;
    this.mu = RSAUtils.biDivide(b2k, this.modulus);
    this.bkplus1 = new BigInt();
    this.bkplus1.digits[this.k + 1] = 1;
    this.modulo = BarrettMu_modulo;
    this.multiplyMod = BarrettMu_multiplyMod;
    this.powMod = BarrettMu_powMod;
};
function BarrettMu_modulo(x) {
    var $dmath = RSAUtils;
    var q1 = $dmath.biDivideByRadixPower(x, this.k - 1);
    var q2 = $dmath.biMultiply(q1, this.mu);
    var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1);
    var r1 = $dmath.biModuloByRadixPower(x, this.k + 1);
    var r2term = $dmath.biMultiply(q3, this.modulus);
    var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1);
    var r = $dmath.biSubtract(r1, r2);
    if (r.isNeg) {
        r = $dmath.biAdd(r, this.bkplus1);
    }
    var rgtem = $dmath.biCompare(r, this.modulus) >= 0;
    while (rgtem) {
        r = $dmath.biSubtract(r, this.modulus);
        rgtem = $dmath.biCompare(r, this.modulus) >= 0;
    }
    return r;
}
function BarrettMu_multiplyMod(x, y) {
    var xy = RSAUtils.biMultiply(x, y);
    return this.modulo(xy);
}
function BarrettMu_powMod(x, y) {
    var result = new BigInt();
    result.digits[0] = 1;
    var a = x;
    var k = y;
    while (true) {
        if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);
        k = RSAUtils.biShiftRight(k, 1);
        if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
        a = this.multiplyMod(a, a);
    }
    return result;
}
RSAUtils.encrypt = function(str, pwd) {
    if (str == '') {
        return '';
    }
    str = encodeURIComponent(str);
    pwd = encodeURIComponent(pwd);
    if (pwd == '' || pwd.length <= 0) {
        return '';
    }
    var prand = '';
    for (var i = 0,
    len = pwd.length; i < len; i += 1) {
        prand += pwd.charCodeAt(i).toString();
    }
    var sPos = Math.floor(prand.length / 5);
    var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
    var incr = Math.ceil(pwd.length / 2);
    var modu = Math.pow(2, 31) - 1;
    if (mult < 2) {
        return '';
    }
    var salt = Math.round(Math.random() * 1000000000) % 100000000;
    prand += salt;
    while (prand.length > 10) {
        prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
    }
    prand = (mult * prand + incr) % modu;
    var encChr = '';
    var encStr = '';
    for (var i = 0,
    len = str.length; i < len; i += 1) {
        encChr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
        if (encChr < 16) {
            encStr += '0' + encChr.toString(16);
        } else {
            encStr += encChr.toString(16);
        }
        prand = (mult * prand + incr) % modu;
    }
    salt = salt.toString(16);
    while (salt.length < 8) {
        salt = "0" + salt;
    }
    encStr += salt;
    return encStr;
}
RSAUtils.decrypt = function(str, pwd) {
    if (str == '') {
        return '';
    }
    pwd = encodeURIComponent(pwd);
    if (str == undefined || str.length < 8) {
        return '';
    }
    if (pwd == undefined || pwd.length <= 0) {
        return '';
    }
    var prand = '';
    for (var i = 0,
    len = pwd.length; i < len; i += 1) {
        prand += pwd.charCodeAt(i).toString();
    }
    var sPos = Math.floor(prand.length / 5);
    var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
    var incr = Math.round(pwd.length / 2);
    var modu = Math.pow(2, 31) - 1;
    var salt = parseInt(str.substring(str.length - 8, str.length), 16);
    str = str.substring(0, str.length - 8);
    prand += salt;
    while (prand.length > 10) {
        prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
    }
    prand = (mult * prand + incr) % modu;
    var encChr = '';
    var encStr = '';
    for (var i = 0,
    len = str.length; i < len; i += 2) {
        encChr = parseInt(parseInt(str.substring(i, i + 2), 16) ^ Math.floor((prand / modu) * 255));
        encStr += String.fromCharCode(encChr);
        prand = (mult * prand + incr) % modu;
    }
    return decodeURIComponent(encStr);
}
var RSAKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
    var $dmath = RSAUtils;
    this.e = $dmath.biFromHex(encryptionExponent);
    this.d = $dmath.biFromHex(decryptionExponent);
    this.m = $dmath.biFromHex(modulus);
    this.chunkSize = 2 * $dmath.biHighIndex(this.m);
    this.radix = 16;
    this.barrett = new $w.BarrettMu(this.m);
};
RSAUtils.getKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
    return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus);
};
if (typeof $w.twoDigit === 'undefined') {
    $w.twoDigit = function(n) {
        return (n < 10 ? "0": "") + String(n);
    };
}
RSAUtils.encryptedString = function(key, s) {
    var a = [];
    var sl = s.length;
    var i = 0;
    while (i < sl) {
        a = s.charCodeAt(i);
        i++;
    }
    while (a.length % key.chunkSize != 0) {
        a[i++] = 0;
    }
    var al = a.length;
    var result = "";
    var j, k, block;
    for (i = 0; i < al; i += key.chunkSize) {
        block = new BigInt();
        j = 0;
        for (k = i; k < i + key.chunkSize; ++j) {
            block.digits[j] = a[k++];
            block.digits[j] += a[k++] << 8;
        }
        var crypt = key.barrett.powMod(block, key.e);
        var text = key.radix == 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix);
        result += text + " ";
    }
    return result.substring(0, result.length - 1);
};
RSAUtils.decryptedString = function(key, s) {
    var blocks = s.split(" ");
    var result = "";
    var i, j, block;
    for (i = 0; i < blocks.length; ++i) {
        var bi;
        if (key.radix == 16) {
            bi = RSAUtils.biFromHex(blocks);
        } else {
            bi = RSAUtils.biFromString(blocks, key.radix);
        }
        block = key.barrett.powMod(bi, key.d);
        for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {
            result += String.fromCharCode(block.digits[j] & 255, block.digits[j] >> 8);
        }
    }
    if (result.charCodeAt(result.length - 1) == 0) {
        result = result.substring(0, result.length - 1);
    }
    return result;
};
RSAUtils.setMaxDigits(130);
})(window);
function getpwd(Password) {
var key = new RSAUtils.getKeyPair("10001", "", "89308162363623c9f24633dd0695e1924060f93b4fe929638e313195b13e8f3cdca3864fb176ae0aeb5b14dc7ff9c98369181412a8b56ac309d76c684fa88b6f03f1475975357db7dba5ca05060f5739dd2f817589ea78d2e0eff7566ae4e36d8647dba56bdf8de79301334677eb389b60*F5e6e2d05f777eb8a67814c718b7");
Password = RSAUtils.encryptedString(key, Password);
return Password;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表