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;
        }
    }
  • 相关阅读:
    C++指针
    Linux Ubuntu常用终端命令
    java-JDBC-Oracle数据库连接
    HDU 1890 区间反转
    Hdu-3487 Splay树,删除,添加,Lazy延迟标记操作
    UVa 10088
    UVa10025-The ? 1 ? 2 ? ... ? n = k problem
    UVa10023手动开大数平方算法
    UVa 10007
    点的双联通+二分图的判定(poj2942)
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/5622314.html
Copyright © 2011-2022 走看看