zoukankan      html  css  js  c++  java
  • RSAUtil工具类

    import org.apache.commons.codec.binary.Base64;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.security.*;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    
    public class RSAUtil {
        static Logger LOG = LoggerFactory.getLogger(RSAUtil.class);
    
        private static final String SIGNATURE_ALGORITHM = "SHA1withRSA";                     //签名算法
        private static final String KEY_ALGORITHM = "RSA";        //加密算法RSA
    
        /**
         * 公钥验签
         *
         * @param text      原字符串
         * @param sign      签名结果
         * @param publicKey 公钥
         * @return 验签结果
         */
        public static boolean verify(String text, String sign, String publicKey) {
            try {
                Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
                PublicKey key = KeyFactory.getInstance(KEY_ALGORITHM).generatePublic(new X509EncodedKeySpec(Base64.decodeBase64(publicKey)));
                signature.initVerify(key);
                signature.update(text.getBytes());
                return signature.verify(Base64.decodeBase64(sign));
            } catch (Exception e) {
                LOG.error("验签失败:text={},sign={}", text, sign, e);
            }
            return false;
        }
    
        /**
         * 签名字符串
         *
         * @param text       需要签名的字符串
         * @param privateKey 私钥(BASE64编码)
         * @return 签名结果(BASE64编码)
         */
        public static String sign(String text, String privateKey) {
            byte[] keyBytes = Base64.decodeBase64(privateKey);
            PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
            try {
                KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
                PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
                Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
                signature.initSign(privateK);
                signature.update(text.getBytes());
                byte[] result = signature.sign();
                return Base64.encodeBase64String(result);
            } catch (Exception e) {
                LOG.error("签名失败,text={}", text, e);
            }
            return null;
        }
    
    }
  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12329724.html
Copyright © 2011-2022 走看看