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

问题描述 投票:0回答:1
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如何转换或得到一个公共密钥和私人密钥的字符串表示,大部分的答案是很老,只对如何字符串PUBKEY =转换“......”;成键。我试图生成密钥,并获得编码的字节,我试图将字节转换为字符串如我上面的代码显示,但我不知道如果我通过简单地将已编码的字节为一个字符串做正确的方式。

java public-key-encryption encryption-symmetric
1个回答
2
投票
  1. 所述私钥/公钥字节:字节[] theBytes = key.getEncoded();
  2. 使用新的String(theBytes)不是那么好,因为它使用的默认字符集(基于OS)。更好的是通过你想要的字符集(如UTF-8)在那个一致。
  3. 我建议有私人/公共密钥的HEX表示。有多种方式为byte []转换为十六进制字符串(Java code To convert byte to Hexadecimal)。具有HEX格式也使得关键更容易一些用户界面来阅读。 E.g:AA BB CC 22 24 C1 ..
  4. 另一种选择是Base64格式e.g:Base64.getEncoder()encodeToString(theBytes)。 (Java的8)
© www.soinside.com 2019 - 2024. All rights reserved.