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/C++源代码中的注释
    windows进程的创建方法
    Android之人脸识别
    虹软离线人脸识别 ArcFace 2.0 Demo [C++]
    Android人脸识别Demo竖屏YUV方向调整和图片保存
    基于虹软的Android的人脸识别SDK使用测试
    C# 视频多人脸识别的实现过程
    基于人脸识别技术实战开发人证比对访客系统
    免费人脸识别APi
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/5622314.html
Copyright © 2011-2022 走看看