繁体   English   中英

Java中PKCS#5 PBKDF1的算法名称是什么?

[英]What is the algorithm name for PKCS#5 PBKDF1 in Java?

在使用密码学时,我有几个问题。 我正在使用AES。

问题1:

我正在尝试在中使用SecretKeyFactory类。 我正在尝试获取与PBKDF1 PKCS#5相关的实例。 我是密码学的新手。 我在网上尝试过,但Iam无法找到任何此类算法。 确实支持。 我想要这样的东西。

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

根据SecretKeyFactoryJava 6 API文档

应用程序开发人员应参考其提供商的文档,以找出generateSecret和getKeySpec方法支持哪些关键规范。 例如,“ SunJCE”提供程序提供的DES密钥工厂支持DESKeySpec作为DES密钥的透明表示,而该提供程序的Triple DES密钥的秘密工厂支持DESedeKeySpec作为Triple 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 <digest> And <encryption>或PBEWith <prf> And <encryption>:与PKCS#5基于密码的加密一起使用的密钥工厂,其中<digest>是消息摘要,<prf>是伪随机函数,<encryption>是一种加密算法。 示例:PBEWithMD5AndDES(PKCS#5,v 1.5)和PBEWithHmacSHA1AndDESede(PKCS#5,v 2.0)。 注意:它们都仅使用每个密码字符的低8位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM