2011-12-16 59 views
2

有人可以请我解释一下如何用私钥签名字符串或字节数组?请。两周我试图实现它。 我有代码:用私钥签名字符串

private static byte[] createSignature(byte[] file) { 
    byte[] signature = null; 

    try { 
     java.security.KeyStore keyStoreFile = java.security.KeyStore 
       .getInstance("PKCS12"); 
     keyStoreFile.load(new FileInputStream("keyStore.pfx"), 
       "password".toCharArray()); 

     // nuskaitomas privatus raktas iš failo 
     PrivateKey privateKey = (PrivateKey) keyStoreFile.getKey(
       "alais", "password".toCharArray()); 

     Signature dsa = Signature.getInstance(SHA1withRSA); 
     dsa.initSign(privateKey); 
     dsa.update(file, 0, file.length); 
     signature = dsa.sign(); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return signature; 
} 

但这只是一个签名。 。

+1

该代码会给你签名。您应该能够使用公钥验证它。你还需要什么? – Thilo 2011-12-16 07:42:19

回答

0

更改返回签名;代替:

byte[] encryptedByteValue = Base64.encodeBase64(signature); 
return new String(encryptedByteValue, "UTF-8"); 
0

通过您的代码示例,您可以生成输入数据的签名。

如果您还想以加密形式返回数据,则可以使用非对称(或对称)加密。

对于您的情况,您可以返回使用您的PrivateKey加密的数据: 您可以找到示例here