JCE 数字签名 公钥 私钥

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;
  }
 }

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA加密是一种常见的非对称加密算法,它使用公钥私钥进行加密解密操作。公钥用于加密数据,而私钥则用于解密加密的数据。 在软件开发领域,有许多可以生成RSA密钥对以及执行加密解密操作的软件。其中一些广泛使用的软件包括OpenSSL、CryptGenKey、Java Cryptography Extension(JCE)和Python Crypto库等。 OpenSSL是一个开源的软件库,提供了许多加密解密算法的实现,包括RSA。它可以用于生成RSA密钥对,并提供了一组API用于加密解密数据。 CryptGenKey是一个Windows平台上的API函数,可以用于生成RSA密钥对。通过调用这个函数,开发人员可以轻松地生成公钥私钥,以便用于加密解密操作。 Java Cryptography Extension(JCE)是Java平台上的一个扩展,提供了许多加密解密算法的实现,包括RSA。开发人员可以使用JCE来生成RSA密钥对,并使用其API执行加密解密操作。 Python Crypto库是一个Python软件包,提供了用于加密解密的许多算法实现,包括RSA。它可以用于生成RSA密钥对,并提供了一组函数用于加密解密数据。 总结来说,RSA加密公钥私钥软件是一类可以生成RSA密钥对并提供加密解密功能的软件。常见的软件包括OpenSSL、CryptGenKey、Java Cryptography Extension(JCE)和Python Crypto库等。这些软件可以帮助开发人员在软件开发过程中轻松实现RSA加密

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值