下面列出了java.security.interfaces.DSAPublicKey#getEncoded ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static void main(String[] args) throws Exception {
Provider provider = Security.getProvider("SUN");
System.out.println(provider.getInfo());
for (Provider.Service service : provider.getServices()) {
System.out.println(service);
}
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
kpg.initialize(2048);
System.out.println("DSA.provider: " + kpg.getProvider());
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
System.out.println("DSA.provider: " + keyFactory.getProvider());
KeyPair pair = kpg.genKeyPair();
DSAPublicKey publicKey = (DSAPublicKey) pair.getPublic();
byte[] encoded = publicKey.getEncoded();
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encoded);
DSAPublicKey publicKey1 = (DSAPublicKey) keyFactory.generatePublic(publicKeySpec);
System.out.printf("keys are equal: %s%n", publicKey1.equals(publicKey));
String base64 = Base64.getEncoder().encodeToString(encoded);
System.out.println(base64);
}
@Override
public KeyProxy serialize(DSAPublicKey obj) {
log.info("DSAPublicKeyObjectSubstitution.serialize");
byte[] encoded = obj.getEncoded();
KeyProxy proxy = new KeyProxy();
proxy.setContent(encoded);
return proxy;
}
/**
*
* @author timliu
* 说明: 用java的jdk里面相关方法实现dsa的签名及签名验证
*/
public static void jdkDSA()
{
try {
// 1.初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
DSAPublicKey dsaPublicKey = (DSAPublicKey)keyPair.getPublic();
DSAPrivateKey dsaPrivateKey = (DSAPrivateKey)keyPair.getPrivate();
// 2.进行签名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Signature signature = Signature.getInstance("SHA1withDSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
System.out.println("jdk dsa sign:" + Hex.encodeHexString(result) );
// 3.验证签名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("DSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("SHA1withDSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);
System.out.println("jdk dsa verify:" + bool);
} catch (Exception e) {
System.out.println(e.toString());
}
}