使用Java加密敏感应用程序数据

问题描述:

我目前正在评估处理高度敏感的个人信息的项目,因此需要对其进行加密。我们正在谈论几百兆字节的多媒体文件,如MP3或其他。该应用程序肯定会以JavaFX作为GUI /前端在Java中实现。现在我正在寻找一种可行的解决方案来保护这些数据免受无意/故意滥用。数据需要以某种方式加密。用户需要在使用该软件之前提供登录凭证,因此使用密码来解锁用于对称加密的密钥是可能的。该应用程序的用户将是非专业人士,因此像TrueCrypt或类似的解决方案不会做的伎俩。虽然某种透明解决方案是最好的。那么对于这个问题有没有(半)标准解决方案?使用Java加密敏感应用程序数据

感谢您的帮助

问候,

安德烈亚斯

+0

你尝试考虑看看JCE运行(Java加密扩展) ? http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html和http://download.oracle.com/javase/1.4.2/docs/guide/security/jce/ JCERefGuide.html – Pushkar 2010-12-13 15:05:56

+0

其实这是一个很好的提示,但我更多地寻找某种即可使用的库,它为我提供了一切。但是密码{输入,输出}流类看起来不错,创建某种包装来为某些文件提供透明加密应该是个问题。 – 2010-12-13 21:27:38

以下方法加密给定的字节数组,其中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个字节的块后,你需要增加初始向量,即如果加密在计数器模式:)

使用公共密钥加密算法,如RSA。强大,几乎不可破解,易于使用和理解。甚至有可能是Java中的RSA或类似加密的方法甚至是类。

+1

不是一个真正的答案,也不是真正的正确。 – 2010-12-09 23:32:31