问题
I am using the following in a RoR project:
somepass =Aes.encrypt_buffer(128, 'ECB', some_cypher_key, nil, pain_string)
Does using this lib and method ECB use padding by default or not?
What I am ultimately trying to do is have a RoR app and a Java app be able to create the same encrypted string out of the same simple string.
In Java code I use:
cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
These two lines of code do not create the same encrypted key.
回答1:
Aes.encrypt_buffer
will use padding, just not that kind that you are expecting. It will pad the block with n bytes with the value of added bytes. That is to say, if it needs to add 15 bytes, it will pad with 0x0f
, if it needs to add 5bytes, it will pad with 0x05
. That is to say, PKCS7 as described in RFC-5652.
You should switch to openssl or use Cipher.getInstance("AES/ECB/PKCS7Padding", "BC")
with java.
来源:https://stackoverflow.com/questions/5677550/does-ruby-aes-use-padding-by-default