java rsa加密算法_java RSA加密算法

/*

* RSA, a suite of routines for performing RSA public-key computations in JavaScript.

* Copyright 1998-2005 David Shapiro.

* Dave Shapiro

* dave@ohdave.com

* changed by Fuchun, 2010-05-06

* fcrpg2005@gmail.com

*/

(function($w) {

if(typeof $w.RSAUtils === 'undefined')

var RSAUtils = $w.RSAUtils = {};

var biRadixBase = 2;

var biRadixBits = 16;

var bitsPerDigit = biRadixBits;

var biRadix = 1 << 16; // = 2^16 = 65536

var biHalfRadix = biRadix >>> 1;

var biRadixSquared = biRadix * biRadix;

var maxDigitVal = biRadix - 1;

var maxInteger = 9999999999999998;

//maxDigits:

//Change this to accommodate your largest number size. Use setMaxDigits()

//to change it!

//

//In general, if you're working with numbers of size N bits, you'll need 2*N

//bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need

//

//1024 * 2 / 16 = 128 digits of storage.

//

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);

//The maximum number of digits in base 10 you can convert to an

//integer without JavaScript throwing up on you.

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;

};

//lr10 = 10 ^ dpl10

var lr10 = RSAUtils.biFromNumber(1000000000000000);

RSAUtils.biFromDecimal = function(s) {

var isNeg = s.charAt(0) == '-';

var i = isNeg ? 1 : 0;

var result;

// Skip leading zeros.

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) { // 2 <= radix <= 36

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 = RSAUt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值