signature=c9e077ef93038bf703dbc146dd834bb7,基于RSASignUtil非对称私钥进行字符串加签及公钥解密验证的完整代码示例...

一、前言

通过之前定义RSAUtil工具类可以生成获取rsa非对称公私钥,基于私钥我们通过将字符串进行加签加密,再通过公钥进行解密验证,详情参见RSASignUtil代码工具类示例。

二、代码示例import java.security.KeyFactory;@b@import java.security.PrivateKey;@b@import java.security.PublicKey;@b@import java.security.Signature;@b@import java.security.spec.PKCS8EncodedKeySpec;@b@import java.security.spec.X509EncodedKeySpec;@b@@b@public class RSASignUtil {@b@@b@private static final String KEY_ALGORITHM = "RSA";@b@private static final String SIGNATURE_ALGORITHM = "SHA1withRSA";@b@@b@/**@b@ * 加签数据@b@ * @b@ * @param String@b@ *            data 待加签数据@b@ * @param String@b@ *            privateKey 私钥@b@ * @return String signedData 加签值(十六进制)@b@ * */@b@public static String sign(String data, String privateKey) throws Exception {@b@try {@b@byte[] signData = sign(data, hexStringToByte(privateKey));@b@@b@return byteToHexString(signData);@b@@b@} catch (Exception e) {@b@throw new Exception("signature.sign.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 加签数据@b@ * @b@ * @param String@b@ *            data 待加签数据@b@ * @param byte[] privateKey 私钥@b@ * @return byte[] signedData@b@ * */@b@public static byte[] sign(String data, byte[] privateKeyBytes)@b@throws Exception {@b@@b@try {@b@PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(@b@privateKeyBytes);@b@KeyFactory keyf = KeyFactory.getInstance(KEY_ALGORITHM);@b@PrivateKey key = keyf.generatePrivate(priPKCS8);@b@@b@// 进行签名服务@b@Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);@b@signature.initSign(key);@b@signature.update(data.getBytes());@b@byte[] signData = signature.sign();@b@@b@// 返回签名结果@b@return signData;@b@} catch (Exception e) {@b@throw new Exception("signature.sign.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 根据对签名数据使用签名者的公钥来解密后验证是否与原数据相同。从而确认用户签名正确@b@ * @b@ * @param String  data 被签名数据@b@ * @param String signStr 使用该用户的私钥生成的已签名数据(十六进制)@b@ * @param String   publicKey 公钥(十六进制)@b@ * @return true或false,验证成功为true。@b@ * @throws Exception@b@ */@b@public static boolean verify(String data, String signStr, String publicKey)@b@throws Exception {@b@try {@b@return verify(data, hexStringToByte(signStr),@b@hexStringToByte(publicKey));@b@} catch (Exception e) {@b@throw new Exception("signature.verify.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 根据对签名数据使用签名者的公钥来解密后验证是否与原数据相同。从而确认用户签名正确@b@ * @param String   data 被签名数据@b@ * @param byte[] signStr 使用该用户的私钥生成的已签名数据@b@ * @param String  publicKey 公钥@b@ * @return true或false,验证成功为true。@b@ * @throws Exception@b@ */@b@public static boolean verify(String data, byte[] signStrBytes,@b@byte[] publicKeyBytes) throws Exception {@b@try {@b@KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);@b@PublicKey pubKey = keyFactory@b@.generatePublic(new X509EncodedKeySpec(publicKeyBytes));@b@@b@// 进行验证签名服务@b@Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);@b@signature.initVerify(pubKey);@b@signature.update(data.getBytes());@b@return signature.verify(signStrBytes);@b@} catch (Exception e) {@b@throw new Exception("signature.verify.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 二进制byte[]转十六进制string@b@ */@b@public static String byteToHexString(byte[] bytes) {@b@StringBuffer sb = new StringBuffer();@b@for (int i = 0; i  3) {@b@sb.append(strHex.substring(6));@b@} else {@b@if (strHex.length() 

控制台打印结果原文: @b@欢迎您光临,小木人印象http://www.xwood.net网站!!!@b@加签: @b@74ec71ecf9cb57721a68776df49360489dfaaa8e6b97e10e004ec07ce94b65d6023d0b739335aa95c737125b83060be2b74ace8e5cf33f2f7b52c181de1bb5ca8bd61c67e0cc489b993919fdbcd5cbe12bc9e825861f80c56b27e12c2fef73713d51b68fe6ab429d2ede9b1c5b7da4c8a591697de5a005d624e7aa018300ac2e@b@验签结果 : @b@true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值