我目前正在评估一个处理高度敏感的个人信息的项目,因此需要对其进行加密。我们正在谈论几个100兆字节的多媒体文件,如MP3或其他东西。该应用程序肯定会用Java实现,而JavaFX则是GUI / Frontend。现在我正在寻找一种可行的解决方案来保护数据免受无意/故意滥用。数据需要以某种方式加密。用户需要在使用软件之前提供登录凭据,因此使用密码来解锁用于对称加密的密钥是可能的。该应用程序的用户将是非专业的,因此像TrueCrypt或类似解决方案的东西将无法做到这一点。虽然某种透明的解决方案是最好的。那么这个问题有没有(半)标准解决方案?
感谢您的帮助
问候,
安德烈亚斯
答案 0 :(得分:2)
以下方法加密给定的字节数组,其中keyC是加密密钥。 initalVector是用于加密的初始向量。 此向量通常用于计数器(CTR)模式下的AES加密,但对于其他模式不是必需的。它是一个16字节的数组,用于加密和解密。
private byte[] encryptAES128(byte[] input, byte[] initialVector) {
SecretKey aeskey = new SecretKeySpec(keyC, 0, 16, "AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(initialVector);
cipher = Cipher.getInstance("AES/CTR/NOPADDING");
getAesCTRCipher().init(Cipher.ENCRYPT_MODE, aeskey, paramSpec);
return getAesCTRCipher().doFinal(input);
}
此方法返回一个新的字节数组,即加密的输入数组。 它始终以16字节为单位工作。 对于较大的文件,您需要在字节上运行for循环并连接结果:)
祝你好运!编辑: 在加密16字节的块之后,您需要递增初始向量,即加密在计数器模式下运行:)
答案 1 :(得分:-3)
使用公钥加密算法,例如RSA。强大,几乎无法破解,易于使用和理解。在Java中甚至可能有RSA或类似加密的方法甚至是类。