2011-09-19 1 views
0

J'ai essayé mais n'a pas réussi à encoder une chaîne Javascript pour décoder sur un serveur java. Nous aimerions utiliser l'algorithme Bouncycastle PBEWITHSHA256AND256BITAES-CBC-BC pour décoder le côté serveur.bouncycastle PBEWITHSHA256AND256BITAES-CBC-BC Javascript mise en œuvre

J'ai essayé d'utiliser crypto.js pour l'encodage en utilisant le code suivant:

var encrypted = Crypto.AES.encrypt("it was Professor Plum in the library with the candlestick", 
     key, 
     { mode: new Crypto.mode.CBC }); 

    var encryptedString = Crypto.util.bytesToHex(Crypto.charenc.Binary.stringToBytes(crypted)); 

Toutefois, cela ne décode pas correctement sur le serveur, je suppose que ses quelque chose à voir avec le SHA256 mais je peux Ne pas savoir ce qu'il serait digérer & ne trouve aucune documentation. Est-ce que quelqu'un sait comment effectuer le cryptage en javascript?

+0

Juste une note: [Cryptographie en JavaScript navigateur est presque toujours une mauvaise idée] (http://www.matasano.com/articles/javascript-cryptography/). –

+0

Ce n'est pas pour un navigateur en soi mais plutôt un jeu Unity3D. Merci encore :) – Sig

+1

Encore, pensez à utiliser TLS/SSL au lieu de faire Crypto en JavaScript. –

Répondre

1

Vous devez tout faire la même aux deux extrémités. Vous avez besoin de la même clé. Vous avez besoin du même mode (CBC) vous avez besoin du même remplissage (utilisez PKCS7) et vous avez besoin de la même IV.

Vérifiez que la clé réelle que vous utilisez est la même aux deux extrémités en affichant l'hexagone, après avoir exécuté le mot de passe par SHA-256. Vérifiez également l'hexagone pour les intraveineuses. N'utilisez aucun paramètre par défaut, mais choisissez explicitement le mode et le remplissage à utiliser.

Si vous pensez qu'il est le PBE/SHA-256 qui va mal, vous voudrez peut-être regarder comment votre mot de passe de texte est transformé en octets. Encore une fois, vérifiez l'hexagone des deux côtés avant de le transmettre à SHA-256. La conversion de texte en octets est une source commune d'erreurs. Vous devez être très sûr de ce que stringToBytes() fait et que tout ce que vous utilisez sur le côté Java est en train de faire exactement même.