【问题标题】:Encrypting sensitive application data in Java在 Java 中加密敏感的应用程序数据
【发布时间】:2010-12-13 22:55:58
【问题描述】:

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

感谢您的帮助

您好,

安德烈亚斯

【问题讨论】:

标签: java encryption file


【解决方案1】:

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

【讨论】:

  • 这并不能完全回答这个问题,因为我不想与可能出错的加密内部有任何关系,即忘记增加 IV。在我看来这些东西很容易出错
  • 除了CTR还有其他加密模式,不需要IV。 Imo 这是一个非常方便的解决方案
【解决方案2】:

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

【讨论】:

  • 不是一个真正的答案,也不是真正正确的。
  • 作为一名计算机科学专业的我,这样做的理论很清楚。但是在大多数情况下,自己进行加密是一个非常糟糕的主意。
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 2012-08-11
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2016-10-08
  • 2013-05-22
  • 1970-01-01
相关资源
最近更新 更多