从String创建自定义RSA密钥

时间:2018-06-02 01:31:55

标签: java cryptography rsa

如何从String创建自定义RSA密钥?假设我有一个类似密码的字符串键。

String key = md5("testing");

有没有办法使用密钥创建私钥,并使用RSA从生成的私钥派生公钥?

我知道当你有一个特定的String时使用对称密钥是最好的做法,但我想知道是否可以用RSA做到这一点以及如何做到这一点?

2 个答案:

答案 0 :(得分:1)

是的,这是可能的,因为RSA密钥生成算法基本上使用(加密安全的)伪随机数生成器生成随机数,直到它找到一些是素数。通过使用密钥为PRNG播种,您可以确定地生成密钥对。您可以使用密码类似地生成ECC密钥对。

我应该注意,生成的公钥可能是强制性的:如果有人知道你一直在使用这种方法来生成密钥对,他们可以自己使用它并尝试许多密码来查看它们是否得到了相同的公共密钥键。如果是这样,他们也找到了私钥。出于这个原因,您应该像往常一样对密码哈希强制使用相同的防御:使用强密码,慢速/不可并行化的密钥派生函数(例如scrypt,或旧的PBKDF2)和salt。因此,不应使用建议的使用md5派生密钥的方法。

在Java中,从密钥生成密钥对看起来像这样(未经测试):

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, new SecureRandom(key));
KeyPair keyPair = generator.generateKeyPair();

答案 1 :(得分:0)

不,那是不可能的。私钥/公钥对基于巨素数的数学。没有办法使用预先存在的16字节MD5哈希作为密钥。