2016-04-18 17 views
2

Richtig, ich habe ein kleines Problem. Ich benutze eine Javascript-Bibliothek (jsencrypt), um eine Nachricht in einem Browser zu verschlüsseln. Diese Nachricht wird dann an das Backend gesendet, wo sie mit einer Java-Bibliothek (Bouncycastle) entschlüsselt wird. Mein Problem ist, obwohl ich Nachrichten verschlüsseln und entschlüsseln kann, die beide Bibliotheken verwenden, scheinen sie nicht zusammenarbeiten möchten. Wenn ich also meine Nachricht in einem Browser verschlüssle und sie an das Backend sende, bekomme ich ein verwirrtes Kauderwelsch. Hat jemand eine Idee, was hier vor sich geht?RSA verschlüsselt mit Jsencrypt und entschlüsseln mit Hüpfburg?

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

BouncyCastle

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

Haben Sie versucht, auf Vorder- und Rückseite zu verschlüsseln, und zu sehen, ob der Chiffretext übereinstimmt? –

+0

Was ist das erwartete Ergebnis, sollte das Java-Beispiel 'cypherText' in' This is another msg! 'Entschlüsseln? – stjepano

+0

@stjepano Ja, das hoffe ich. –

Antwort

1

@ EbbeM.Pedersen

Du richtig unterschiedliche Standard padding bekommen m Oden. Keywords wie RSA-OAEP Padding & PKCS # 1 Polsterung kommt in den Sinn.

Dies war in der Tat das Problem. Ich habe das Standard-Padding in Bouncycastle zu PKCS # 1 geändert und alles funktioniert jetzt.

Danke eine Million.

+0

Ich habe das gleiche Problem, wie haben Sie das Standardpolster für BC geändert? – EpicJoker

+0

@WarrenLankieVanTonder Sie müssen Ihre asymmetrische Chiffre einstellen, um die folgenden Einstellungen zu verwenden RSA/None/PKCS1Padding –

+0

Danke @ T-Pane Ich gucke jetzt. – EpicJoker

Verwandte Themen