From cf178eec8bb8e0ebe0763295d2a47ff4826bcc7f Mon Sep 17 00:00:00 2001 From: chenjiahe <763432473@qq.com> Date: 星期四, 31 三月 2022 15:57:59 +0800 Subject: [PATCH] 新增RSA的校验和生成签名方法 --- src/main/java/com/hx/util/rsa/RSASignature.java | 124 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 124 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/hx/util/rsa/RSASignature.java b/src/main/java/com/hx/util/rsa/RSASignature.java new file mode 100644 index 0000000..ed41ab5 --- /dev/null +++ b/src/main/java/com/hx/util/rsa/RSASignature.java @@ -0,0 +1,124 @@ +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; + } + +} -- Gitblit v1.8.0