我正在使用java加密技术来生成公钥和私钥。我正在使用String.getBytes()
来生成它。但是在解密时我使用相同的String.getBytes()
来获取密钥。但我没有得到与以前相同的密钥。请帮忙。下面是代码示例。
KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom ss = null;
ss = new SecureRandom("ABCD".getBytes(UNICODE_FORMAT));
keyGenerator.initialize(512, ss);
KeyPair myKeyPair = keyGenerator.generateKeyPair();
System.out.println(myKeyPair.getPrivate());
System.out.println(myKeyPair.getPublic());
答案 0 :(得分:2)
您的代码表明您对如何使用非对称加密有一个基本的误解。您的发件人和收件人应该拥有自己的独立密钥对。然后,发件人使用收件人的公钥加密数据。
您正在做的是使用固定字符串在两个位置生成相同的密钥对。这是不安全的,因为你已经将密钥空间从512位(已经太小 - 在至少 1024位)使用减少到与(可能是短的)字符串相关联的熵。 / p>
如果您希望使用“密码”字符串来获取两端的密钥,则使用对称算法(例如AES)和密码派生函数(如PBKDF2)。