Java中PKCS#5 PBKDF1的算法名称是什么?
What is the algorithm name for PKCS#5 PBKDF1 in Java?
我在使用密码学方面有几个问题。我正在使用 AES。
问题1:
我正在尝试在 中使用 SecretKeyFactory
类。我正在尝试获取与 PBKDF1 PKCS#5 相关的实例。我是密码学的新手。我在网上尝试过,但我找不到任何这样的算法。确实支持它。我想要这样的东西。
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF1Pkcs#5");
KeySpec spec = new PBEKeySpec(password, salt, 1, 128);
问题2:
上述两行代码是否与 Crypto++ 代码中的以下代码行执行相同的操作?
PKCS5_PBKDF1 <MD5> fn;
fn.DeriveKey(key, MD5::DIGESTSIZE, 0, key.getBytes(), salt.getBytes(), salt.size(), PBKDF1_ITERATIONS, time_in_seconds);
如果没有,有人可以给出一些可以模仿上述 c++ 代码行所做的事情的东西。
谢谢
回复:问题 1
根据 SecretKeyFactory 的 Java 6 API 文档,
应用程序开发人员应参考其提供程序的文档,以了解 generateSecret 和 getKeySpec 方法支持哪些关键规范。例如,"SunJCE"提供程序提供的 DES 密钥工厂支持 DESKeySpec 作为 DES 密钥的透明表示形式,该提供程序的三重 DES 密钥的密钥工厂支持 DESedeKeySpec 作为三重 DES 密钥的透明表示形式。
如果我们查看 PKCS 的 SunJCE 提供程序文档,我们会看到...
PBEWithMD5AndDES:RSA 实验室,"PKCS #5:基于密码的加密标准"1.5 版,1993 年 11 月中定义的基于密码的加密算法。请注意,此算法暗示 CBC 作为密码模式,将 PKCS5Padding 作为填充方案,不能与任何其他密码模式或填充方案一起使用。
回复:问题2
在同一文档中的"使用基于密码的加密"部分中,您将找到以下示例代码。 请记住,示例代码使用静态盐,但安全实现会在用户每次更改其密码时使用生成随机盐。
PBEKeySpec pbeKeySpec;
PBEParameterSpec pbeParamSpec;
SecretKeyFactory keyFac;
// Salt
byte[] salt = {
(byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
(byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
};
// Iteration count
int count = 20;
// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, count);
// Prompt user for encryption password.
// Collect user password as char array (using the
// "readPasswd" method from above), and convert
// it into a SecretKey object, using a PBE key
// factory.
System.out.print("Enter encryption password: ");
System.out.flush();
pbeKeySpec = new PBEKeySpec(readPasswd(System.in));
keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
// Our cleartext
byte[] cleartext = "This is another example".getBytes();
// Encrypt the cleartext
byte[] ciphertext = pbeCipher.doFinal(cleartext);
其他算法
同样,来自同一页面。 真的,我建议您通读整件事,因为它也可能回答您的其他问题。
PBEWith
And 或PBEWith And :用于PKCS #5基于密码的加密的密钥工厂,其中<摘要>是消息摘要, 是伪随机函数,<加密>是一种加密算法。示例:PBEWithMD5AndDES (PKCS #5, v 1.5) 和 PBEWithHmacSHA1AndDESede (PKCS #5, v 2.0)。注意:它们都仅使用每个密码字符的低阶 8 位。加密> 摘要>
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 找到对称矩阵的最大元素的最有效算法是什么
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 是什么让这种易失性打破了结构的指针算法?
- 将 24 位".bmp"图像转换为黑白/单色图像的可能算法是什么?
- 从n的角度来看,该算法的复杂性是什么
- MFC 用于计算控件的高光、阴影等的算法或函数是什么?
- 该加密算法的名称是什么
- 在某些范围更新后获取整数数组的最终状态的有效算法是什么?
- 这个给定算法中的"basic operation"究竟是什么
- 搜索一组点,其长度总和最小为矩形.算法是什么
- 实现 15 谜题算法的正确方法是什么
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 从给定的 IPv6:端口列表中搜索 IPv6:端口组合的最快搜索算法是什么 O(1) 时间一致性
- 比较阵列相似性的最佳比较算法是什么?
- shake_transform_iterator作为推力中的第二个参数的重点是什么:: dredion算法
- 在图算法中,确定是否访问节点的最佳方法是什么?
- 改进malloc()算法的下一步是什么
- 卡达内算法的实际用途是什么?
- Dijkstra算法中的INT_MAX是什么?