zoukankan      html  css  js  c++  java
  • 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;
        }
    
    
    
    }
  • 相关阅读:
    能自证的任意类型即为动态类型
    类型系统:类型信息引用 isa
    类型系统:类型检查、类型转换、任意类型-强类型、类型转换
    动态类型与弱类型
    Swift Intermediate Language (SIL)
    swift -Dynamic Dispatch
    swift VTables
    Which dispatch method would be used in Swift?
    Which dispatch method would be used in Swift?-Existential Container
    Swift protocol extension method is called instead of method implemented in subclass
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/6739811.html
Copyright © 2011-2022 走看看