Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中PKCS#5 PBKDF1的算法名称是什么?_Java_C++_Security - Fatal编程技术网

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

Java中PKCS#5 PBKDF1的算法名称是什么?,java,c++,security,Java,C++,Security,在使用密码学方面,我有几个问题。我正在使用AES 问题1: 我正在尝试使用中的SecretKeyFactory类。我正在尝试获取与PBKDF1 PKCS#5相关的实例。我对密码学一无所知。我在网上试过,但我找不到这样的算法。他确实支持这一点。我想要这样的东西 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF1Pkcs#5"); KeySpec spec = new PBEKeySpec(password, salt, 1

在使用密码学方面,我有几个问题。我正在使用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);
PKCS5_PBKDF1 fn;
fn.DeriveKey(key,MD5::DIGESTSIZE,0,key.getBytes(),salt.getBytes(),salt.size(),PBKDF1_迭代次数,以秒为单位的时间);

如果不能,有些人可以给出一些东西来模拟上面的C++代码行什么。


谢谢

回复:问题1

根据

应用程序开发人员应参考其提供商的文档,以了解GenerateCret和getKeySpec方法支持哪些关键规范。例如,“SunJCE”提供程序提供的DES密钥工厂支持DESKeySpec作为DES密钥的透明表示,该提供程序的三重DES密钥密钥工厂支持DESedeKeySpec作为三重DES密钥的透明表示

如果我们看一下PKC的数据,我们会看到

PBEWithMD5AndDES:RSA实验室“PKCS#5:基于密码的加密标准”1.5版中定义的基于密码的加密算法,1993年11月。请注意,此算法暗示CBC作为密码模式,PKCS5P作为填充方案,不能与任何其他密码模式或填充方案一起使用

Re:问题2

在同一文档中,在“使用基于密码的加密”一节中,您将找到以下示例代码。请记住,示例代码使用静态salt,但安全实现将使用在用户每次更改密码时生成随机salt

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);
其他算法

同样,来自同一页。真的,我建议你通读整本书,因为它可能会回答你的其他问题

PBEWithAnd或PBEWithAnd:用于PKCS#5基于密码的加密的密钥工厂,其中是消息摘要,是伪随机函数,是加密算法。示例:PBEWithMD5AndDES(PKCS#5,V1.5)和pBeWithHMACSHA1和DeSede(PKCS#5,V2.0)。注意:它们都只使用每个密码字符的低位8位


您好,谢谢您的回复。我实际上在使用AES。我在文档中没有找到任何与AES相关的算法。你知道像PBEWithMD5AndAES这样的东西吗?你今天真的不想继续使用MD5。@ravi:答案在JCE链接上。我用更多的复制/粘贴文本更新了我的答案。