2014-09-18 123 views
-4

我正在尝试编写将使用1024字节密钥进行AES-256加密/解密的Java代码。我研究了互联网的实施,并且有很多方法可以实施。使用1024字节密钥实现AES-256

我看了看下面的教程:

  1. http://karanbalkar.com/2014/02/tutorial-76-implement-aes-256-encryptiondecryption-using-java/
  2. https://gist.github.com/bricef/2436364

,但没有发现有需要的哪些步骤。所以我的问题是我需要启动encryptiopn/decryption。不指定算法(AES-256)和密钥是否足够?我需要调用哪些API?


此外,我打算写一个工具类与暴露加密和解密的两种方法。我打算在构造函数中初始化所有这些设置。所以建议我把这个类放到我的Spring web应用程序中。

+3

由于密钥大小为256位,AES-256的名称中没有256个? – soulcheck 2014-09-18 21:35:44

+0

是吗?我认为256是数据分组编码的大小。而1024是我们使用的密钥的大小。 – 2014-09-19 03:31:20

+1

256是关键尺寸... – ChiaraHsieh 2014-09-19 05:51:20

回答

2

AES is only defined for 128, 192 and 256 bit keys。这些分别被称为AES-128,AES-192和AES-256。所以你不能在AES中使用1024字节密钥。

AES块大小(您所描述的“数据为编码分组的大小”)始终为AES的128位。 Rijndael,它的一个子集成为AES,除了128位块之外,还支持256位块。对于1024字节的密钥,Rijndael和AES都没有定义。

如果你有这么大的密钥材料,你可以使用像SHA-256这样的散列或象HKDF这样的适当的KDF将它减少到256位。显然这会将安全级别降低到256位,但这仍然很多。为什么AES没有被定义为更大的密钥的原因是传统的计算机永远不能暴力破解256位的密钥。请参阅crypto.se上的How much would it cost in U.S. dollars to brute force a 256 bit key in a year?

+0

有没有我可以开始使用的Java代码。有不同的实施。我想要一个简单的。我正在更具体地了解输入是什么样的(键,键等等),我可以使用哪些Java API? – 2014-09-19 13:48:39

+1

@ user4035943使用支持AES-GCM的东西。并且绝对确保你**不再重用(密钥,随机数)对**。 – CodesInChaos 2014-09-19 14:43:19