标签: jsbn

javascript中的RSA不再支持ASCII /字节数组

我使用http://www-cs-students.stanford.edu/~tjw/jsbn/中的 rsa.js v1.0 来加密浏览器中的ASCII字符串.该字符串实际上是一个16字节的数组,包含一个双倍长度的TripleDes键.使用rsa v1.0,这是有效的.字节数组在服务器上正确解密(使用Bouncy Castle或Thales HSM)作为16字节数组.

例如

var zpk = hex2a("E0F8AD4092F81FC401E60ECB7F5B8F1A");
var rsa = new RSAKey();
rsa.setPublic(modulus, exponent);
var res = rsa.encrypt(zpk);
if (res) {
    document.rsatest.zpkrsa.value = hex2b64(res);
}
Run Code Online (Sandbox Code Playgroud)

移动rsa.js v1.4时,这不再适用.Bouncy castle解密数据,但它不是一个16字节的数组,而是一个25字节的数组.

我在rsa.js库中看到的关键区别在于v1.1发行说明:

当PKCS1编码和解码JavaScript字符串时,添加了对非ASCII字符的utf-8编码的支持.

v1.0中的PKCS#1填充是:

// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
function pkcs1pad2(s, n) {
    if (n < s.length + 11) {
        alert("Message too long for RSA");
        return null;
    }
    var ba = new Array();
    var i = …
Run Code Online (Sandbox Code Playgroud)

javascript encryption cryptography public-key-encryption jsbn

6
推荐指数
1
解决办法
814
查看次数

JS和Python之间的RSA加密和解密(pycrypto)

我从JS RSA库(http://www-cs-students.stanford.edu/~tjw/jsbn/)加密纯文本,然后从python Crypto.PublicKey解密。

但是,当我使用python从JS解密密文时,它具有伪文本。我不知道为什么。

因此,我想要没有伪内容的明文。(例如测试)

  1. 在Python中制作密钥对。

    key = RSA.generate(1024) #(publicKey, privateKey)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 保存模数,JS中的指数并加密“测试”

    var rsa = new RSAKey();
    rsa.setPublic(modulus, exponent); //modulus and exponent hex string
    rsa.encrypt("test");
    
    Run Code Online (Sandbox Code Playgroud)

    导致(十六进制字符串):d0ab7e22f92adcca7182e3c622b513382d163033df5ca0f3c0327e8a1774258800ae57dfc98522f5ed40a4bed2f4b54f46ea800ff1ef522b104b0f874a598f6bbcf5453506f8bf2f8aa3b04b0c73f0018564707304b3a059326d51945d3ff0282d63c2c4c1ea6ba5a2172af83ef8bdc1d104a8d67ba95ee97ab89b36cd5c34d4

  3. 在Python中使用PrivateKey解密

    key.decrypt(above_result.decode('hex'))
    
    Run Code Online (Sandbox Code Playgroud)

    结果:\ x02 \ xf0 \ xae \ xafK \ xd3 \ x17 \ xfc \ xf4 \ xd6 \ xd9 = \ xee7 \ x04 \ x94 \ xea \ x9c \ xd8 \ xf7-\ x19 \ x05 $!'#\ xad \ x82'\ xfcKG \ xadK \ xb6_ \ xabMZ:\ …

javascript python rsa pycrypto jsbn

5
推荐指数
1
解决办法
1841
查看次数

RSA 消息太长 Javascript JSBN

我在 javascript 中使用 JSBN 来加密 Facebook 数据的一组字符串(消息),以将它们安全地发送到我的服务器(PHP)并在那里解密。

一些用户在类似的内容上遇到“消息太长”的情况

"&fbemail='+fbemail+'&gender='+fbgender+'&birthday='+fbbirthday+'&name='+fbname+'&surname='+fbsurname+'&fbuser='+fbuserid"
Run Code Online (Sandbox Code Playgroud)

我通过以下方式生成了私钥:

$privateKey = openssl_pkey_new(array(
          'private_key_bits' => 1024,
          'private_key_type' => OPENSSL_KEYTYPE_RSA,
        ));
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这条消息?消息并没有那么长。

我看过下面的文章,但我不明白如何在 javascript 中使用 AES 而不泄露 AES 密码。

RSA加密问题[有效负载数据的大小]

javascript rsa public-key-encryption jsbn

4
推荐指数
1
解决办法
7119
查看次数

RSA在javascript中与PHP不同

我现在遇到RSA问题.我在Javascript和PHP中有相同的模数和指数.在javascript中都使用PKCS#1,我使用http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.js

var rsa = new RSAKey();
rsa.setPublic("modulus","ex");
var result = rsa.encrypt(text);
Run Code Online (Sandbox Code Playgroud)

在PHP中,我使用http://phpseclib.sourceforge.net/

require_once 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
$n="modulus";
$e="ex";
$rsa->modulus= new Math_BigInteger($n,16);
$rsa->publicExponent= new Math_BigInteger($e,16);
$key=$rsa->getPublicKey();
$rsa->loadKey($key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt("1234");
echo bin2hex($ciphertext);
Run Code Online (Sandbox Code Playgroud)

但是2结果是不同的.可以请告诉我原因.非常感谢你

javascript php rsa phpseclib jsbn

0
推荐指数
1
解决办法
1494
查看次数