开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

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

[易语言] 求教这个RSA加密怎么写出,str值就是密码不固定的

[复制链接]
结帖率:45% (5/11)
发表于 5 小时前 | 显示全部楼层 |阅读模式   山东省济南市
5精币
define(["plugin/rsa/rsa.pack"], function() {
    $we.rsa = {
        publicKey: "C99F5B2FA7880E5224BCA8B6E6EAAF03CF0AE7CC74D881B2C532C0346B743911",
        maxDigit: 131,
        encryptExp: "10001",
        encrypt: function(str) {
            if (typeof encryptedString != "function")
                return str;
            return encryptedString(key, str);
        }
    };
    setMaxDigits($we.rsa.maxDigit);
    var key = new RSAKeyPair($we.rsa.encryptExp,'',$we.rsa.publicKey);
    return $we.rsa;
});


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

签到天数: 26 天

发表于 3 小时前 | 显示全部楼层   江西省赣州市
[JavaScript] 纯文本查看 复制代码
function BarrettMu(a) {
    this.modulus = biCopy(a),
    this.k = biHighIndex(this.modulus) + 1;
    var b = new BigInt;
    b.digits[2 * this.k] = 1,
    this.mu = biDivide(b, 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(a) {
    var b = biDivideByRadixPower(a, this.k - 1)
      , c = biMultiply(b, this.mu)
      , d = biDivideByRadixPower(c, this.k + 1)
      , e = biModuloByRadixPower(a, this.k + 1)
      , f = biMultiply(d, this.modulus)
      , g = biModuloByRadixPower(f, this.k + 1)
      , h = biSubtract(e, g);
    h.isNeg && (h = biAdd(h, this.bkplus1));
    for (var i = biCompare(h, this.modulus) >= 0; i; )
        h = biSubtract(h, this.modulus),
        i = biCompare(h, this.modulus) >= 0;
    return h
}
function BarrettMu_multiplyMod(a, b) {
    var c = biMultiply(a, b);
    return this.modulo(c)
}
function BarrettMu_powMod(a, b) {
    var c = new BigInt;
    c.digits[0] = 1;
    for (var d = a, e = b; ; ) {
        if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),
        e = biShiftRight(e, 1),
        0 == e.digits[0] && 0 == biHighIndex(e))
            break;
        d = this.multiplyMod(d, d)
    }
    return c
}
function setMaxDigits(a) {
    maxDigits = a,
    ZERO_ARRAY = Array(maxDigits);
    for (var b = 0; ZERO_ARRAY.length > b; b++)
        ZERO_ARRAY = 0;
    bigZero = new BigInt,
    bigOne = new BigInt,
    bigOne.digits[0] = 1
}
function BigInt(a) {
    this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),
    this.isNeg = !1
}
function biFromDecimal(a) {
    for (var d, b = "-" == a.charAt(0), c = b ? 1 : 0; a.length > c && "0" == a.charAt(c); )
        ++c;
    if (c == a.length)
        d = new BigInt;
    else {
        var e = a.length - c
          , f = e % dpl10;
        for (0 == f && (f = dpl10),
        d = biFromNumber(Number(a.substr(c, f))),
        c += f; a.length > c; )
            d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
            c += dpl10;
        d.isNeg = b
    }
    return d
}
function biCopy(a) {
    var b = new BigInt(!0);
    return b.digits = a.digits.slice(0),
    b.isNeg = a.isNeg,
    b
}
function biFromNumber(a) {
    var b = new BigInt;
    b.isNeg = 0 > a,
    a = Math.abs(a);
    for (var c = 0; a > 0; )
        b.digits[c++] = a & maxDigitVal,
        a >>= biRadixBits;
    return b
}
function reverseStr(a) {
    for (var b = "", c = a.length - 1; c > -1; --c)
        b += a.charAt(c);
    return b
}
function biToString(a, b) {
    var c = new BigInt;
    c.digits[0] = b;
    for (var d = biDivideModulo(a, c), e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )
        d = biDivideModulo(d[0], c),
        digit = d[1].digits[0],
        e += hexatrigesimalToChar[d[1].digits[0]];
    return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {
    var b = new BigInt;
    b.digits[0] = 10;
    for (var c = biDivideModulo(a, b), d = c[1].digits[0] + ""; 1 == biCompare(c[0], bigZero); )
        c = biDivideModulo(c[0], b),
        d += c[1].digits[0] + "";
    return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {
    var b = 15
      , c = "";
    for (i = 0; 4 > i; ++i)
        c += hexToChar[a & b],
        a >>>= 4;
    return reverseStr(c)
}
function biToHex(a) {
    var b = "";
    biHighIndex(a);
    for (var d = biHighIndex(a); d > -1; --d)
        b += digitToHex(a.digits[d]);
    return b
}
function charToHex(a) {
    var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;
    return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {
    for (var b = 0, c = Math.min(a.length, 4), d = 0; c > d; ++d)
        b <<= 4,
        b |= charToHex(a.charCodeAt(d));
    return b
}
function biFromHex(a) {
    for (var b = new BigInt, c = a.length, d = c, e = 0; d > 0; d -= 4,
    ++e)
        b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
    return b
}
function biFromString(a, b) {
    var c = "-" == a.charAt(0)
      , d = c ? 1 : 0
      , e = new BigInt
      , f = new BigInt;
    f.digits[0] = 1;
    for (var g = a.length - 1; g >= d; g--) {
        var h = a.charCodeAt(g)
          , i = charToHex(h)
          , j = biMultiplyDigit(f, i);
        e = biAdd(e, j),
        f = biMultiplyDigit(f, b)
    }
    return e.isNeg = c,
    e
}
function biDump(a) {
    return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {
    var c;
    if (a.isNeg != b.isNeg)
        b.isNeg = !b.isNeg,
        c = biSubtract(a, b),
        b.isNeg = !b.isNeg;
    else {
        c = new BigInt;
        for (var e, d = 0, f = 0; a.digits.length > f; ++f)
            e = a.digits[f] + b.digits[f] + d,
            c.digits[f] = 65535 & e,
            d = Number(e >= biRadix);
        c.isNeg = a.isNeg
    }
    return c
}
function biSubtract(a, b) {
    var c;
    if (a.isNeg != b.isNeg)
        b.isNeg = !b.isNeg,
        c = biAdd(a, b),
        b.isNeg = !b.isNeg;
    else {
        c = new BigInt;
        var d, e;
        e = 0;
        for (var f = 0; a.digits.length > f; ++f)
            d = a.digits[f] - b.digits[f] + e,
            c.digits[f] = 65535 & d,
            0 > c.digits[f] && (c.digits[f] += biRadix),
            e = 0 - Number(0 > d);
        if (-1 == e) {
            e = 0;
            for (var f = 0; a.digits.length > f; ++f)
                d = 0 - c.digits[f] + e,
                c.digits[f] = 65535 & d,
                0 > c.digits[f] && (c.digits[f] += biRadix),
                e = 0 - Number(0 > d);
            c.isNeg = !a.isNeg
        } else
            c.isNeg = a.isNeg
    }
    return c
}
function biHighIndex(a) {
    for (var b = a.digits.length - 1; b > 0 && 0 == a.digits; )
        --b;
    return b
}
function biNumBits(a) {
    var e, b = biHighIndex(a), c = a.digits, d = (b + 1) * bitsPerDigit;
    for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)
        c <<= 1;
    return e
}
function biMultiply(a, b) {
    for (var d, h, i, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b), k = 0; f >= k; ++k) {
        for (d = 0,
        i = k,
        j = 0; e >= j; ++j,
        ++i)
            h = c.digits + a.digits[j] * b.digits[k] + d,
            c.digits = h & maxDigitVal,
            d = h >>> biRadixBits;
        c.digits[k + e + 1] = d
    }
    return c.isNeg = a.isNeg != b.isNeg,
    c
}
function biMultiplyDigit(a, b) {
    var c, d, e;
    result = new BigInt,
    c = biHighIndex(a),
    d = 0;
    for (var f = 0; c >= f; ++f)
        e = result.digits[f] + a.digits[f] * b + d,
        result.digits[f] = e & maxDigitVal,
        d = e >>> biRadixBits;
    return result.digits[1 + c] = d,
    result
}
function arrayCopy(a, b, c, d, e) {
    for (var f = Math.min(b + e, a.length), g = b, h = d; f > g; ++g,
    ++h)
        c[h] = a[g]
}
function biShiftLeft(a, b) {
    var c = Math.floor(b / bitsPerDigit)
      , d = new BigInt;
    arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c);
    for (var e = b % bitsPerDigit, f = bitsPerDigit - e, g = d.digits.length - 1, h = g - 1; g > 0; --g,
    --h)
        d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
    return d.digits[0] = d.digits[g] << e & maxDigitVal,
    d.isNeg = a.isNeg,
    d
}
function biShiftRight(a, b) {
    var c = Math.floor(b / bitsPerDigit)
      , d = new BigInt;
    arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c);
    for (var e = b % bitsPerDigit, f = bitsPerDigit - e, g = 0, h = g + 1; d.digits.length - 1 > g; ++g,
    ++h)
        d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
    return d.digits[d.digits.length - 1] >>>= e,
    d.isNeg = a.isNeg,
    d
}
function biMultiplyByRadixPower(a, b) {
    var c = new BigInt;
    return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
    c
}
function biDivideByRadixPower(a, b) {
    var c = new BigInt;
    return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
    c
}
function biModuloByRadixPower(a, b) {
    var c = new BigInt;
    return arrayCopy(a.digits, 0, c.digits, 0, b),
    c
}
function biCompare(a, b) {
    if (a.isNeg != b.isNeg)
        return 1 - 2 * Number(a.isNeg);
    for (var c = a.digits.length - 1; c >= 0; --c)
        if (a.digits[c] != b.digits[c])
            return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
    return 0
}
function biDivideModulo(a, b) {
    var f, g, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;
    if (d > c)
        return a.isNeg ? (f = biCopy(bigOne),
        f.isNeg = !b.isNeg,
        a.isNeg = !1,
        b.isNeg = !1,
        g = biSubtract(b, a),
        a.isNeg = !0,
        b.isNeg = e) : (f = new BigInt,
        g = biCopy(a)),
        Array(f, g);
    f = new BigInt,
    g = a;
    for (var h = Math.ceil(d / bitsPerDigit) - 1, i = 0; biHalfRadix > b.digits[h]; )
        b = biShiftLeft(b, 1),
        ++i,
        ++d,
        h = Math.ceil(d / bitsPerDigit) - 1;
    g = biShiftLeft(g, i),
    c += i;
    for (var j = Math.ceil(c / bitsPerDigit) - 1, k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )
        ++f.digits[j - h],
        g = biSubtract(g, k);
    for (var l = j; l > h; --l) {
        var m = l >= g.digits.length ? 0 : g.digits[l]
          , n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1]
          , o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2]
          , p = h >= b.digits.length ? 0 : b.digits[h]
          , q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1];
        f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p);
        for (var r = f.digits[l - h - 1] * (p * biRadix + q), s = m * biRadixSquared + (n * biRadix + o); r > s; )
            --f.digits[l - h - 1],
            r = f.digits[l - h - 1] * (p * biRadix | q),
            s = m * biRadix * biRadix + (n * biRadix + o);
        k = biMultiplyByRadixPower(b, l - h - 1),
        g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
        g.isNeg && (g = biAdd(g, k),
        --f.digits[l - h - 1])
    }
    return g = biShiftRight(g, i),
    f.isNeg = a.isNeg != e,
    a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),
    b = biShiftRight(b, i),
    g = biSubtract(b, g)),
    0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
    Array(f, g)
}
function biDivide(a, b) {
    return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {
    return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {
    return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {
    for (var c = bigOne, d = a; ; ) {
        if (0 != (1 & b) && (c = biMultiply(c, d)),
        b >>= 1,
        0 == b)
            break;
        d = biMultiply(d, d)
    }
    return c
}
function biPowMod(a, b, c) {
    for (var d = bigOne, e = a, f = b; ; ) {
        if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),
        f = biShiftRight(f, 1),
        0 == f.digits[0] && 0 == biHighIndex(f))
            break;
        e = biMultiplyMod(e, e, c)
    }
    return d
}
function RSAKeyPair(a, b, c) {
    this.e = biFromHex(a),
    this.d = biFromHex(b),
    this.m = biFromHex(c),
    this.chunkSize = 2 * biHighIndex(this.m),
    this.radix = 16,
    this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {
    return (10 > a ? "0" : "") + (a + "")
}
function encryptedString(a, b) {
    for (var c = Array(), d = b.length, e = 0; d > e; )
        c[e] = b.charCodeAt(e),
        e++;
    for (; 0 != c.length % a.chunkSize; )
        c[e++] = 0;
    var h, i, j, f = c.length, g = "";
    for (e = 0; f > e; e += a.chunkSize) {
        for (j = new BigInt,
        h = 0,
        i = e; e + a.chunkSize > i; ++h)
            j.digits[h] = c[i++],
            j.digits[h] += c[i++] << 8;
        var k = a.barrett.powMod(j, a.e)
          , l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix);
        g += l + " "
    }
    return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {
    var e, f, g, c = b.split(" "), d = "";
    for (e = 0; c.length > e; ++e) {
        var h;
        for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),
        g = a.barrett.powMod(h, a.d),
        f = 0; biHighIndex(g) >= f; ++f)
            d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8)
    }
    return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
    d
}
var biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998, maxDigits, ZERO_ARRAY, bigZero, bigOne;
setMaxDigits(20);
var dpl10 = 15
  , lr10 = biFromNumber(1e15)
  , hexatrigesimalToChar = Array("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")
  , hexToChar = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")
  , highBitMasks = Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535)
  , lowBitMasks = Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
 
 
function rsa_enc(x){
    var aaa = {
        publicKey: "C99F5B2FA7880E5224BCA8B6E6EAAF03CF0AE7CC74D881B2C532C0346B743911",
        maxDigit: 131,
        encryptExp: "10001",
        encrypt: function(str) {
            if (typeof encryptedString != "function")
                return str;
            return encryptedString(key, str);
        }
    };
    setMaxDigits(aaa.maxDigit);
    var key = new RSAKeyPair(aaa.encryptExp,'',aaa.publicKey);
    return aaa.encrypt(x)
}
回复

使用道具 举报

结帖率:75% (3/4)

签到天数: 28 天

发表于 1 小时前 | 显示全部楼层   河南省洛阳市
发下网站
回复

使用道具 举报

签到天数: 25 天

发表于 1 小时前 | 显示全部楼层   河南省郑州市
发下网站
回复

使用道具 举报

结帖率:100% (22/22)

签到天数: 26 天

发表于 1 小时前 | 显示全部楼层   江西省赣州市
算法.txt (14.16 KB, 下载次数: 1)
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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