zoukankan      html  css  js  c++  java
  • RSA签名验签

    import android.util.Base64;
    
    import java.security.KeyFactory;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    
    /**
     * Author:JsonLu
     * DateTime:2016/6/23 19:50
     * Email:jsonlu@qq.com
     * Desc:RSA签名验签工具类
     **/
    public class RSAUtil {
        private static final String SIGN_ALGORITHMS = "SHA1WithRSA";
        //私钥 PKCS8格式
        private static final String SUMPAY_PAYMENT_PRIVATE_KEY = "";
        private static final String SUMPAY_PAYMENT_SERVER_PUBLIC_KEY = "";
    
        /**
         * RSA签名
         *
         * @param content       待签名数据
         * @param input_charset 编码格式
         * @return 签名值
         */
        public static String sign(String content, String input_charset) {
            try {
                PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(SUMPAY_PAYMENT_PRIVATE_KEY, Base64.DEFAULT));
                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(input_charset));
                byte[] signed = signature.sign();
                return Base64.encodeToString(signed, Base64.DEFAULT);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * RSA验签名检查
         *
         * @param content       待签名数据
         * @param sign          签名值
         * @param input_charset 编码格式
         * @return 布尔值
         */
        public static boolean verify(String content, String sign, String input_charset) {
            try {
                KeyFactory keyFactory = KeyFactory.getInstance("RSA");
                byte[] encodedKey = Base64.decode(SUMPAY_PAYMENT_SERVER_PUBLIC_KEY, Base64.DEFAULT);
                PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
                java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
                signature.initVerify(pubKey);
                signature.update(content.getBytes(input_charset));
                boolean bverify = signature.verify(Base64.decode(sign, Base64.DEFAULT));
                return bverify;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }
    }
  • 相关阅读:
    Maven笔记之面试题合集
    Maven笔记之核心概念及常用命令
    UML中的关系
    RocketMq核心概念
    linux安装rocketMq(包括安装maven,JDK)
    linux安装JDK,配置环境变量
    ASP.NET Core读取appsettings.json配置文件信息
    ASP.NET Core获取客户端IP地址
    ASP.NET Core根据环境切换NLog配置
    ASP.NET Core使用NLog记录日志
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/5622314.html
Copyright © 2011-2022 走看看