我正在尝试以字符串格式将RSA密钥对(公共/私有)保存到数据库中,然后从数据库中检索它们并将其转换回(公共密钥/私有密钥)格式。
我尝试了以下代码;第一个函数生成公共/私有代码,最后两个函数用于将字符串转换为密钥对格式。
public static Voter generateKeyPair(Voter v) throws NoSuchAlgorithmException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
kpg.initialize(2048, new SecureRandom(v.getPassword().getBytes()));
KeyPair kp = kpg.generateKeyPair();
PrivateKey privKey = kp.getPrivate();
PublicKey pubKey = kp.getPublic();
String pubKeyString = new BigInteger(pubKey.getEncoded()).toString(64);
String privKeyString = new BigInteger(privKey.getEncoded()).toString(64);
v.setPrivateKey(privKeyString);
v.setPublicKey(pubKeyString);
return v;
}
public static Key getPublicKey(String keyString) throws GeneralSecurityException, IOException {
byte[] key = Base64.getDecoder().decode((keyString.getBytes()));
X509EncodedKeySpec spec = new X509EncodedKeySpec(key);
KeyFactory fact = KeyFactory.getInstance("DSA");
PublicKey pub = fact.generatePublic(spec);
return pub;
}
public static Key getPrivateKey(String keyString) throws GeneralSecurityException, IOException {
byte[] key = Base64.getDecoder().decode(keyString.getBytes());
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(key);
KeyFactory fact = KeyFactory.getInstance("DSA");
PrivateKey priv = fact.generatePrivate(keySpec);
return priv;
}
第一件事,我得到了公钥>私钥的值,这没有任何意义。
当我尝试运行代码时,出现以下错误: java.security.spec.InvalidKeySpecException:不适当的密钥规范:IOException:DerInputStream.getLength():lengthTag = 13,太大。