是否有将字符串转换为RSA密钥的函数?

时间:2019-04-07 20:39:41

标签: java key rsa

我正在尝试以字符串格式将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,太大。

0 个答案:

没有答案