我使用以下代码加密SD卡中的文件。
void encrypt() throws IOException, NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException {
String myString = getOutputFile();
File myFile = new File(myString);
FileInputStream inputStream = new FileInputStream(myFile);
File encodedfile = new File(path,"filename" + ".mp4");
FileOutputStream outputStream = new FileOutputStream(encodedfile);
SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, sks);
CipherOutputStream cos = new CipherOutputStream(outputStream, cipher);
int b;
byte[] d = new byte[8];
while((b = inputStream.read(d)) != -1){
cos.write(d, 0, b);
}
cos.flush();
cos.close();
inputStream.close();
由于我是密码学的新手,我不知道是否使用256位加密。我使用256位加密。如果不是我应该添加什么代码使其成为256位加密
答案 0 :(得分:2)
不,您使用的是128位加密,因为您的密码是16个ASCII字符。将其与default character set of Android(UTF-8)相结合,getBytes()
的结果将是16字节或128位的关键数据。
如果它是128位或256位,那不重要。如果您直接将密码或密钥存储在代码中,请使用密码作为密钥,或者如果您依赖默认的ECB加密模式,那么您的代码就不安全。
了解密钥管理,至少使用CBC模式加密并创建256位(32字节)的完全随机AES密钥。 AES密钥大小(在Cipher
中使用)完全取决于Java / Android中的密钥。