抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

// 等同 binascii.hexlify()
function hexlify(str) {
var result = '';
var padding = '00';
for (var i=0, l=str.length; i<l; i++) {
var digit = str.charCodeAt(i).toString(16);
var padded = (padding+digit).slice(-2);
result += padded;
}
return result;
}

// 等同 binascii.unhexlify()
function unhexlify(str) {
var result = '';
for (var i=0, l=str.length; i<l; i+=2) {
result += String.fromCharCode(parseInt(str.substr(i, 2), 16));
}
return result;
}

举例

原python解密代码部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
# str为加密后的数据
str = "xxx"
# 私钥
_key = "------BEGIN RSA PRIVATE KEY-----XXXXXA---"
hex_data = binascii.unhexlify(str)
...
_pwdHex = bytes.decode(hex_data)
...
_rsakey = RSA.importKey(_key)
_cipher = PKCS1_V1_5.new(_rsakey)
_text = _cipher.decrypt(base64.b16decode(_pwdHex), "ERROR")
result = _text.decode('utf-8')

nodejs写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// str为加密后的数据
const str = 'xxx';
// 私钥
const _key = "------BEGIN RSA PRIVATE KEY-----XXXXXA---";
// 等同于py的binascii.unhexlify(str)
const hex_data = unhexlify(str);
// 等同于py的base64.b16decode()
_pwdHex = Buffer.form(hex_data, 'hex');
_text = crypto.privateDecrypt({
key: _key,
padding: crypto.contants.RSA_PKCS1_PADDING
}, hex_data);
result = _text.toString()

评论