zoukankan      html  css  js  c++  java
  • RSA加密解密 rsa加密解密

    package com.sensor.sellCabinet.util;
    
    import cn.hutool.crypto.asymmetric.KeyType;
    import cn.hutool.crypto.asymmetric.RSA;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.stereotype.Component;
    
    
    /**
     * @author 辛毅
     * @date 2020/11/20
     */
    @Slf4j
    @Component
    @ConditionalOnClass(RSA.class)
    public class CryptHelper {
        private static String privateKey="";
    
    
        private static String publicKey="";
    
    
    
        private final RSA rsa;
    
        public CryptHelper() {
            this.rsa = new RSA(privateKey, publicKey);
        }
    
        public String encrypt(String originString) {
            return rsa.encryptBase64(originString, KeyType.PublicKey);
        }
    
        public String decrypt(String encryptString) {
            return new String(rsa.decryptFromBase64(encryptString,KeyType.PrivateKey));
        }
    
    /*    public static void main(String[] args) throws Exception{
            String a="111111
    " +
                "1625549789963";
            System.out.println(new CryptHelper().encrypt(a));
            String s = "c1yB8wyDFeYd9pvk0CJagy5BhxKMjbTd3nQv7NjwMof2PNELhuzELWtiNt3VcGWhAUrARVd2T4ecSsbd5ywF4YhCFfJjyQ07fC4z6kAQ6GQ2Pu/2WP4Gfn+XeyLtG3FMtmC6gNnUPUqeZGCxlsgHuF4oGUkcPZHrStbJ+1/XV+U=";
            System.out.println(new CryptHelper().decrypt(s));
        }*/
        /**
         * 解密并校验时间戳
         *
         * @param encryptString 原文 + '
    ' + 时间戳,加密后的字符串
         * @return 原文
         */
        public String decryptWithTimestamp(String encryptString) {
            String str = rsa.decryptStr(encryptString, KeyType.PrivateKey);
            String[] split = str.split("
    ");
            if (split.length == 2) {
                long timestamp = Long.parseLong(split[1]);
                long now = System.currentTimeMillis();
                // 时间差超过三个小时,判定为伪造数据
                if (Math.abs(now - timestamp) > 3 * 3600 * 1000) {
                    log.error("解密字符串中时间戳距离当前时间超过三个小时,解密结果无效 {}", str);
                    throw new RuntimeException("解密失败");
                }
            }
            return split[0];
        }
    
        /**
         * 加密
         *
         * @param password 原文 + '
    ' + 时间戳,加密后的字符串
         * @return 原文
         */
        public  String decryptPassword(String password) {
            long now = System.currentTimeMillis();
            String encryptString = password+"
    "+now;
            return encrypt(encryptString);
        }
    
    
    
    }
  • 相关阅读:
    Developer 转型记:一个开发平台的“魔力”
    实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库
    一图看懂华为云DevCloud如何应对敏捷开发的测试挑战
    华为云GaussDB(DWS)内存知识点,你知道吗?
    在人工智能时代追逐的“后浪”
    【华为云技术分享】DLI跨源|当DLI遇见MongoDB
    授人以渔:stm32资料查询技巧
    云小课 | IPv4枯了,IPv6来了
    揭秘淘宝平台广告策略,拆解最佳投放实践
    520了,用32做个简单的小程序
  • 原文地址:https://www.cnblogs.com/qq376324789/p/15050046.html
Copyright © 2011-2022 走看看