towersxu / crypto-js

Automatically exported from code.google.com/p/crypto-js
0 stars 0 forks source link

AES encode bytes #48

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What I want to do is to encode byte array same way Java ciphers does. 

Maybe this is already possible by I can't find a way to do this. I've tried 
passing CryptoJS.lib.WordArray but it gives me wrong result or maybe I do not 
understand something.

This is what I've tried:

a = CryptoJS.AES.encrypt("message", "aa")
w = Crypto.util.bytesToWords(Binary.stringToBytes("message"));
b = CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(w), "aa")

b.toString()
"U2FsdGVkX1+INUiseS5zBc/K2NQv0hVEtXZSn5zb8Vs="

a.toString()
"U2FsdGVkX185LoomoBEmXtZcKxf0CGjz4i+2SyGnAwU="

Should those two be equal?

Original issue reported on code.google.com by koszikot@gmail.com on 6 Sep 2012 at 3:52

GoogleCodeExporter commented 8 years ago
There are a couple reasons why they're coming out different. First, when you 
use a string for the key, then it's treated as a passphrase from which to 
derive a pseudo-random key and IV. To get the same ciphertext both times, you'd 
have to supply an actual key and IV. Second, when you use CryptoJS 2 to create 
a WordArray from "message", you need to tell it how many bytes are significant, 
otherwise it will use all eight bytes within the two 32-bit words, rather than 
just the seven bytes that is in your message. And third, the stringToBytes and 
bytesToWords methods of CryptoJS 2 can be replaced by Latin1.parse of CryptoJS 
3, which will also automatically handle the significant bytes issue. This 
should work for you:

var key = CryptoJS.lib.WordArray.random(256/8);
var iv = CryptoJS.lib.WordArray.random(256/8);

a = CryptoJS.AES.encrypt("message", key, { 'iv': iv });
w = CryptoJS.enc.Latin1.parse("message");
b = CryptoJS.AES.encrypt(w, key, { 'iv': iv });

Also, in the future, the more appropriate spot for this question is the 
discussion group.

Original comment by Jeff.Mott.OR on 6 Sep 2012 at 4:36

GoogleCodeExporter commented 8 years ago
Thanks for quick answer! Tho my real question was: how to encrypt byte array 
same way as Java ciphers does? But as suggested I'll use discussion group for 
this one.

Original comment by koszikot@gmail.com on 6 Sep 2012 at 4:57