引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/
java RSA 加签验签
package com.testdemo.core.service.impl.alipay; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * RSA签名验签类 http://blog.csdn.net/wangqiuyun/article/details/42143957/ */ 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(new BASE64Decoder().decodeBuffer(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 new BASE64Encoder().encode(signed); } catch (Exception e) { e.printStackTrace(); } return null; } public static String sign(String content, String privateKey) { try { PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(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 new BASE64Encoder().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 = new BASE64Decoder().decodeBuffer(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(new BASE64Decoder().decodeBuffer(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 = new BASE64Decoder().decodeBuffer(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(new BASE64Decoder().decodeBuffer(sign)); return bverify; } catch (Exception e) { e.printStackTrace(); } return false; } }