/*** 使用rsa签名 发送方—>构建密钥对-》公布密钥给接收方。 发送方—>使用私钥对数据签名-》发送签名、数据给接收方—》接收方使用公钥、签名验证数据*/
private static voidtestJdkRSA() {try{//初始化签名
KeyPairGenerator keyPairGenerator =KeyPairGenerator
.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair=keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey=(RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey=(RSAPrivateKey) keyPair.getPrivate();//2.执行签名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = newPKCS8EncodedKeySpec(
rsaPrivateKey.getEncoded());
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
PrivateKey privateKey=keyFactory
.generatePrivate(pkcs8EncodedKeySpec);
Signature signature= Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes());byte[] result =signature.sign();
System.out.println("jdk ras sign:" +CommonUtils.toHex(result));//3.验证签名
X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(
rsaPublicKey.getEncoded());
keyFactory= KeyFactory.getInstance("RSA");//为了数据的完整性
PublicKey publicKey =keyFactory.generatePublic(x509EncodedKeySpec);
signature= Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());boolean bool =signature.verify(result);
System.out.println("jdk rsa verify:" +bool);
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}/*** 使用dsa签名*/
private static voidtestJdkDSA() {try{//初始化签名
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 = newPKCS8EncodedKeySpec(
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 das sign:" +CommonUtils.toHex(result));//3.验证签名
X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(
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 rsa verify:" +bool);
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}private static voidtestJdkECDSA() {try{//初始化签名
KeyPairGenerator keyPairGenerator =KeyPairGenerator
.getInstance("EC");
keyPairGenerator.initialize(256);
KeyPair keyPair=keyPairGenerator.generateKeyPair();
ECPublicKey dsaPublicKey=(ECPublicKey) keyPair.getPublic();
ECPrivateKey dsaPrivateKey=(ECPrivateKey) keyPair.getPrivate();//2.执行签名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = newPKCS8EncodedKeySpec(
dsaPrivateKey.getEncoded());
KeyFactory keyFactory= KeyFactory.getInstance("EC");
PrivateKey privateKey=keyFactory
.generatePrivate(pkcs8EncodedKeySpec);
Signature signature= Signature.getInstance("SHA1withECDSA");
signature.initSign(privateKey);
signature.update(src.getBytes());byte[] result =signature.sign();
System.out.println("jdk ec sign:" +CommonUtils.toHex(result));//3.验证签名
X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(
dsaPublicKey.getEncoded());
keyFactory= KeyFactory.getInstance("EC");//为了数据的完整性
PublicKey publicKey =keyFactory.generatePublic(x509EncodedKeySpec);
signature= Signature.getInstance("SHA1withECDSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());boolean bool =signature.verify(result);
System.out.println("jdk rsa verify:" +bool);
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}