封裝簽名和驗(yàn)簽兩個(gè)方法驗(yàn)證不成功
// 簽名方法
public static String jdkRSASign(String src) {
String result = null;// 簽名結(jié)果
try {
// 1.初始化秘鑰
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();// 私鑰
// 2.執(zhí)行簽名
PKCS8EncodedKeySpec pkcS8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcS8EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes("UTF-8"));
result = new String(signature.sign(),"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 驗(yàn)簽名方法
public static boolean jdkRSACheck(String src, String sign) {
boolean result = false;
try {
// 1.初始化秘鑰
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();// 公鑰
// 2.驗(yàn)證簽名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes("UTF-8"));
result = signature.verify(sign.getBytes("UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2016-07-24
package com.dhs.test;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import org.bouncycastle.util.encoders.Hex;
public class RSATest {
public static final String SRC_STRING = "fdsfsfsfsfd";
public static void main(String[] args) {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();// 私鑰
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();// 公鑰
String sign = jdkRSASign(rsaPrivateKey, SRC_STRING);
System.out.println("sign:"+sign);
boolean bool = jdkRSACheck(rsaPublicKey, SRC_STRING, sign);
System.out.println(bool);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 簽名方法
public static String jdkRSASign(RSAPrivateKey rsaPrivateKey, String src) {
String result = null;// 簽名結(jié)果
try {
// 2.執(zhí)行簽名
PKCS8EncodedKeySpec pkcS8EncodedKeySpec = new PKCS8EncodedKeySpec(
rsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory
.generatePrivate(pkcS8EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes("UTF-8"));
result = Hex.toHexString(signature.sign());
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 驗(yàn)簽名方法
public static boolean jdkRSACheck(RSAPublicKey rsaPublicKey, String src, String sign) {
boolean result = false;
try {
// 2.驗(yàn)證簽名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(
rsaPublicKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes("UTF-8"));
result = signature.verify(Hex.decode(sign));
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}