如何在android中使用256位aes加密

时间:2014-08-06 08:22:19

标签: android encryption aes

我使用以下代码加密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位加密

1 个答案:

答案 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中的密钥。