1

残りのサービスで使用できる読み取り可能な形式で公開鍵と署名を生成しようとしています。次のコードを記述しています。

public static void  GenearetSignature(String url,String signatureValue,String publicKey){
    KeyPairGenerator keyGen;
    try {
        keyGen = KeyPairGenerator.getInstance("DSA", "SUN");

        SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
        keyGen.initialize(1024, random);
        KeyPair pair = keyGen.generateKeyPair();
        PrivateKey priv = pair.getPrivate();
        PublicKey pub = pair.getPublic();
        System.out.println("Priavte key"+priv);
        System.out.println("Public  key");
        Signature dsa = Signature.getInstance("SHA1withDSA", "SUN"); 
        dsa.initSign(priv);
        dsa.update(url.getBytes());
        byte[]  signatureValueArray = dsa.sign();
        signatureValue=new String(signatureValueArray,"UTF8");
        byte[] publicKeyArray=pub.getEncoded();
        publicKey = new String(publicKeyArray);
        System.out.println("publicKey is "+publicKey);
        System.out.println("signatureValue is "+signatureValue);
    } catch (NoSuchAlgorithmException  ex) {
        // TODO Auto-generated catch block
        ex.printStackTrace();
    } catch(Exception e){
        e.printStackTrace();
    }
}

しかし、これは英数字の値で生成されていません。どうすればそれを達成できますか。助けてください

4

2 に答える 2

1

バイト配列の 16 進数表現が必要な場合は、

javax.xml.bind.DatatypeConverter.printHexBinary(byte[] array)

于 2013-06-12T04:35:06.470 に答える
0

残りの通信にはbase64を使用できます。もう 1 つの例は、base64 を使用してパスワードをエンコードし、HTTP ヘッダーに入れる HTTP 基本認証です。

于 2013-06-12T04:49:31.593 に答える