尝试将私钥和公钥转换为字符串格式

时间:2019-02-03 18:33:52

标签: java public-key-encryption encryption-symmetric

import java.security.*;

public class MyKeyGenerator {

    private KeyPairGenerator keyGen;
    private KeyPair pair;
    private PrivateKey privateKey;
    private PublicKey publicKey;
    private Context context;

    public MyKeyGenerator(Context context, int length)throws Exception{
        this.context =context;
        this.keyGen = KeyPairGenerator.getInstance("RSA");
        this.keyGen.initialize(length);
    }

    public void createKeys(){
        this.pair = this.keyGen.generateKeyPair();
        this.privateKey = pair.getPrivate();
        this.publicKey = pair.getPublic();
    }

    public PrivateKey getPrivateKey(){
        return this.privateKey;
    }

    public PublicKey getPublicKey(){
        return this.publicKey;
    }

    public  String getPrivateKeyStr(){
        byte b [] = this.getPrivateKey().getEncoded();
          return new String(b));
    }

    public  String getPublicKeyStr(){
        byte b [] = this.getPublicKey().getEncoded();
        return new String(b));
    }


}

您好,我已经在SO中搜索了如何转换或获取公钥或私钥的String表示形式,大多数答案都非常古老,仅是如何转换String pubKey =“ ....”;变成钥匙。 我尝试生成密钥并获取编码的字节,并尝试将字节转换为String,如上面的代码所示,但是我不确定是否通过简单地将编码的字节转换为String来以正确的方式进行操作。

1 个答案:

答案 0 :(得分:1)

  1. 私钥/公钥字节: byte [] theBytes = key.getEncoded();
  2. 使用新的String(theBytes)不太好,因为它使用默认的字符集(基于OS)。更好的方法是传递您想要的字符集(例如UTF-8)以保持一致。
  3. 我建议使用私钥/公钥的十六进制表示形式。有多种方法可以将byte []转换为十六进制字符串(Java code To convert byte to Hexadecimal)。拥有HEX格式也使密钥在某些UI中更易于阅读。例如:AA BB CC 22 24 C1 ..
  4. 其他选项是Base64格式,例如:Base64.getEncoder()。encodeToString(theBytes)。 (Java 8)