Java Android:定义要使用的加密:AES 128或AES 256

Java Android:定义要使用的加密:AES 128或AES 256,java,android,encryption,aes,Java,Android,Encryption,Aes,在我使用的android项目中 import javax.crypto.Cipher; ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 我想问:是否使用AES128或AES256,是否由使用的键定义?例如key=“0123456789012345678901234567890123456789012”是否会导致使用AES256 感谢Thomas是,是否使用AES128或AES256由正在使用的键定义 然而,决定它的不是字符串长度,

在我使用的android项目中

import javax.crypto.Cipher;

ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
我想问:是否使用AES128或AES256,是否由使用的键定义?例如
key=“0123456789012345678901234567890123456789012”是否会导致使用AES256


感谢Thomas

是,是否使用AES128或AES256由正在使用的键定义

然而,决定它的不是
字符串
长度,而是
字节[]
长度。在代码中的某个时刻,您应该将
字符串
转换为
字节[]
。生成的
字节[]
的大小是您的密钥大小。如果不知道如何转换
“0123456789012345678901234567890123456789012”
,就不可能知道您的加密强度

或者,您可以使用
KeyGenerator

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    keyGen.init(128); // or 256

    // Generate the secret key specs
    SecretKey secretKey = keyGen.generateKey();
    byte[] byteArray = secretKey.getEncoded();

All
Cipher.getInstance(“AES/CBC/PKCS5Padding”)创建密码。如果您给它一个128位的密钥,它将使用AES128,如果您给它一个256位的密钥,它将使用256。你的示例键是假的。请参阅示例。您当然完全正确,但32个字符不太可能导致少于32个字节,这意味着AES-256或失败。据我所知,Java没有像其他一些愚蠢的框架那样切断或追加密钥字节。