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;
        }
    }
  • 相关阅读:
    Mac_Homebrew
    Python的路径引用
    OpenTSDB-Writing Data
    OpenTSDB介绍
    Git文件状态描述
    TCollector
    TEXT和BLOB区别
    MySQL索引与Index Condition Pushdown
    webService入门学习(一)
    redis学习笔记(一 基本操作)。
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/5622314.html
Copyright © 2011-2022 走看看