package com.hx.util.rsa;
|
|
import com.sun.org.apache.xml.internal.security.utils.Base64;
|
|
import java.security.KeyFactory;
|
import java.security.PrivateKey;
|
import java.security.PublicKey;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
|
|
|
/**
|
* RSA签名验签类
|
*/
|
public class RSASignature{
|
|
/**
|
* 签名算法
|
*/
|
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
|
|
/**
|
* RSA签名
|
* @param content 待签名数据
|
* @param privateKey 商户私钥
|
* @param encode 字符集编码
|
* @return 签名值
|
*/
|
public static String sign(String content, String privateKey, String encode) {
|
try {
|
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decode(privateKey) );
|
|
KeyFactory keyf = KeyFactory.getInstance("RSA");
|
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
|
|
java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
|
|
signature.initSign(priKey);
|
signature.update( content.getBytes(encode));
|
|
byte[] signed = signature.sign();
|
|
return Base64.encode(signed);
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
return null;
|
}
|
|
public static String sign(String content, String privateKey) {
|
try{
|
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decode(privateKey) );
|
KeyFactory keyf = KeyFactory.getInstance("RSA");
|
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
|
java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
|
signature.initSign(priKey);
|
signature.update( content.getBytes());
|
byte[] signed = signature.sign();
|
return Base64.encode(signed);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* RSA验签名检查
|
* @param content 待签名数据
|
* @param sign 签名值
|
* @param publicKey 分配给开发商公钥
|
* @param encode 字符集编码
|
* @return 布尔值
|
*/
|
public static boolean doCheck(String content, String sign, String publicKey,String encode) {
|
try {
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
byte[] encodedKey = Base64.decode(publicKey);
|
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
|
|
|
java.security.Signature signature = java.security.Signature
|
.getInstance(SIGN_ALGORITHMS);
|
|
signature.initVerify(pubKey);
|
signature.update( content.getBytes(encode) );
|
|
boolean bverify = signature.verify( Base64.decode(sign) );
|
return bverify;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return false;
|
}
|
|
public static boolean doCheck(String content, String sign, String publicKey) {
|
try {
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
byte[] encodedKey = Base64.decode(publicKey);
|
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
|
|
|
java.security.Signature signature = java.security.Signature
|
.getInstance(SIGN_ALGORITHMS);
|
|
signature.initVerify(pubKey);
|
signature.update( content.getBytes() );
|
|
boolean bverify = signature.verify( Base64.decode(sign) );
|
return bverify;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return false;
|
}
|
|
}
|