import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;import org.apache.commons.codec.binary.Base64;
public class SignTest {
private String content = "this is a test";/**
* 对私钥进行签名,并返回(以Base64加密形式)
*
* @param priKeyContent
* 私钥内容
* @return
* @throws Exception
*/
private String sign(PrivateKey priKey) throws Exception {
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(priKey);
signature.update(content.getBytes("utf-8"));byte[] sign = signature.sign();
// Base64.encodeBase64()为加密
return new String(Base64.encodeBase64(sign));
}/**
* 校验输入的数字签名与公钥内容是否匹配
*
* @param sign
* 数字签名
* @param certContent
* @return
*/
private boolean checkSignature(String sign, X509Certificate certificate) {
try {
byte[] signed = Base64.decodeBase64(sign.getBytes());Signature signCheck = Signature.getInstance("SHA1WithRSA");
signCheck.initVerify(certificate);
signCheck.update(content.getBytes());return signCheck.verify(signed);
} catch (Exception e) {
return false;
}
}/**
* 根据私钥内容得到私钥
*
* @param priKeyContent
* @return
* @throws Exception
*/
private PrivateKey getPrivateKey(String priKeyContent) throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");// Base64.decodeBase64()为解密
EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64
.decodeBase64(priKeyContent.getBytes()));PrivateKey priKey = keyFactory.generatePrivate(keySpec);
return priKey;
}/**
* 根据公钥(证书)内容得到公钥(证书)
*
* @param content
* @return
*/
private X509Certificate getCertificate(String cerContent) {
try {
InputStream certIn = new ByteArrayInputStream(Base64
.decodeBase64(cerContent.getBytes()));
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) cf
.generateCertificate(certIn);return certificate;
} catch (Exception e) {
return null;
}
}}
JCE 数字签名 公钥 私钥
最新推荐文章于 2022-04-20 11:19:31 发布