【问题标题】:RSA encrypt using jsencrypt and decrypt using bouncy castle?RSA使用jsencrypt加密并使用充气城堡解密?
【发布时间】:2016-08-10 08:39:23
【问题描述】:

是的,我有一个小问题。我正在使用 Javascript 库 (jsencrypt) 在浏览器中加密消息。然后将此消息发送到后端,在后端使用 Java 库 (bouncycastle) 对其进行解密。我的问题是虽然我可以使用这两个库加密和解密消息,但它们似乎不想一起工作。因此,当我在浏览器中加密我的消息并将其发送到后端时,我最终会得到乱码。有谁知道这里发生了什么?

JSENCRYPT

var text = "This is another msg!";
var pubkey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwyTZf5gRWJdEevtK7sJSz14lhs1Jw7+aFhGtr4cbDGxdiXH8J+BwuYmBc6QFMhRw7AeYcgkx9zPb3SICzr+oK17RMA6T66dH+GPXp75LFUmfONfk2JdSeO80mMODGctSuefWDvoQ24Cq0Bz+ysrhP7hRqvJso5a0GMNPwt8ErtWfz4HZjSsaaZ7gXga2h5dq1OTcGNfevkDN9CJtFW/0Wwb/F6cnXngVHE41rsN4POUB3IWcX2CrCGxSraa+xsT/P7AJ8HRJ4wcjl9G2K/rlHJ8ZXZKlIuWwEzx0/F0IjE+S93tLpDgt6YJxjWqYqjL2uuJAGmEU323+PWA3jFTC+QIDAQAB";        

var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey);
var ciphertext = encrypt.encrypt(text);
console.log("ciphertext  : " + ciphertext);

var decrypt = new JSEncrypt();
decrypt.setPrivateKey($("#privkey").val());
var plaintext = decrypt.decrypt(ciphertext);
console.log("plaintext  : " + plaintext);

弹跳城堡

String cipherText = "jQ/I+oyyIfG5ARIHZsa6MfxwHciCt+3p6l+bLh4NPinq2s8eDjbO9O8abhVt2xuBQQcPAIaqbiP3Y3vRFYLOD2O+inKWiL1SpSBxvUb0XlWMgLmOqWUL6w6sL2iEla3i5EbdlrkK0uLA7QOUc6/fGVyLVe8VL7Vv4BGlo/cxR2FN74HK4MtLFRNaLKejwD6WbCNQoz4sIMA/Ez8GRSVEMyeYVZoWELShvyIRCqVADboAeuEP5l+oFlzgQfW6HFdpPnX+9TnHrbezdWhXiuJiD1Mq4VTicsya50MNcXJuPDV7NINYZs72UCS8NTYvfVkFc2lO7EUlDvvJ7Ns4wWuuWQ==";

PemReader pemReader = new PemReader(new InputStreamReader(new FileInputStream("priv.pem")));
PemObject pemObject = null;

try 
{
    pemObject = pemReader.readPemObject();

} finally {

    pemReader.close();
}

PrivateKey privateKey = EncryptionUtil.generatePrivateKey(pemObject.getContent());
byte[] plainText = EncryptionUtil.asymDecrypt(privateKey, cipherText.getBytes());
System.out.println(new String(plainText));

【问题讨论】:

  • 你试过前后都加密,看看密文是否匹配?
  • 预期结果是什么,java示例是否应该将cypherText解密为This is another msg!?
  • @stjepano 是的,这就是我希望做的。
  • 您的 RSA 密钥对的密钥大小是多少?你想解决什么问题?您是否打算使用 RSA 加密文本?因为用 RSA 加密的文本长度非常有限。这就是为什么您应该使用非对称和对称加密之间的混合解决方案来加密较大的文本。如果你想重新发明 TLS,我不建议这样做。
  • 您正确地获得了不同的默认填充模式。像 RSA-OAEP 填充和 PKCS#1 填充这样的关键字浮现在脑海中......

标签: javascript java encryption rsa bouncycastle


【解决方案1】:

@EbbeM.Pedersen

您正确地获得了不同的默认填充模式。关键词 比如 RSA-OAEP 填充和 PKCS#1 填充。

这确实是问题所在。我将 bouncycastle 中的默认填充更改为 PKCS#1,现在一切正常。

谢谢一百万。

【讨论】:

  • 我遇到了同样的问题,你是如何更改 BC 的默认填充的?
  • @WarrenLankieVanTonder 您需要设置非对称密码以使用以下设置 RSA/None/PKCS1Padding
  • 谢谢@T-Pane 我现在看看。
猜你喜欢
  • 2013-05-25
  • 2015-08-09
  • 2013-04-20
  • 2014-05-23
  • 2017-08-21
  • 2015-06-29
  • 2014-09-19
  • 2015-04-26
  • 1970-01-01
相关资源
最近更新 更多