• java RSA 加签验签【转】


    引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/

    java RSA 加签验签

    package com.testdemo.core.service.impl.alipay;
    
    import java.security.KeyFactory;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    /**
     * RSA签名验签类 http://blog.csdn.net/wangqiuyun/article/details/42143957/
     */
    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(new BASE64Decoder().decodeBuffer(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 new BASE64Encoder().encode(signed);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        public static String sign(String content, String privateKey) {
            try {
                PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(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 new BASE64Encoder().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 = new BASE64Decoder().decodeBuffer(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(new BASE64Decoder().decodeBuffer(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 = new BASE64Decoder().decodeBuffer(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(new BASE64Decoder().decodeBuffer(sign));
                return bverify;
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return false;
        }
    
    
    
    }
  • 相关阅读:
    一套完整的javascript面试题
    遇到的java.lang.NoClassDefFoundError解决了
    Win7下启动Internet信息服务(IIS)管理器
    我的第一个专业博客
    “用NetBeans打开项目时项目名变成红色”问题解决
    Struts2框架实现计算器功能
    MyEclipse移动包到另一个项目时出现错误:Resource is out of sync with the file system.
    制作Javascript弹出窗口技巧九则
    windows 的鼠标事件(Event)
    Javascript使用cookie
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/6739811.html
Copyright © 2020-2023  润新知