gpt4 book ai didi

java - 理解AES加密代码的解释

转载 作者:行者123 更新时间:2023-12-01 17:17:33 24 4
gpt4 key购买 nike

我正在创建一个项目来加密和解密文件。我有这两种运行良好的算法:

public static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}

public static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}

public static byte[] getRaw(String password_) throws Exception {

byte[] keyStart = password_.getBytes();
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
sr.setSeed(keyStart);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
byte[] key = skey.getEncoded();

return key;
}

现在我需要解释一下它是如何工作的。它使用私钥吗? key 存储在哪里?谁能帮我吗?

最佳答案

Note: see owlstead's answer for an excellent description of the flaws in your code example

您的encrypt()decrypt()操作正在执行AES分别使用Java的JCE libraries进行加密和解密。将选择一个 JCE 提供程序来执行实际的加密 - 所选择的提供程序将是 list of providers 中的第一个提供程序。它提供了 AES 的实现。您已将算法仅定义为“AES”,因此操作模式和填充将由提供商选择。如果您想控制它,请使用形式 "AES/mode/padding" (有关有效选择,请参阅 the docs)

getRaw方法从密码派生 AES key 。密码的原始字节提供 the seed对于随机数生成器。然后使用随机数生成器为 128 位 AES key 生成足够的 key Material 。不同的密码将产生不同的种子,这应该产生不同的随机字节流,从而产生不同的 key 。我怀疑这种方法因大多数人的密码中缺乏熵而被削弱,导致 key space 减少。以及更容易的攻击。<​​/p>

您的示例代码中没有 key 存储。 JCE key 通常使用 KeyStore 进行持久化。对象和存储机制是依赖于提供者的。

关于java - 理解AES加密代码的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com