zoukankan      html  css  js  c++  java
  • 使用base64实现用户密码加密

    一个类和一个jar包即可搞定

    jar包:org.apache.commons.codec.binary.Base64;

    下载地址:https://mvnrepository.com/artifact/commons-codec/commons-codec

    类:

    package com.xxl.job.admin.util;
     
    import java.security.Key;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
     
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
     
    import org.apache.commons.codec.binary.Base64;
     
    public class CryptoUtil {
     
        public static Key DEFAULT_KEY = null;
     
        public static final String DEFAULT_SECRET_KEY = "1qaz2wsx3edc$RFV%TGB^YHN&UJM";
     
        public static final String DES = "DES";
     
        static {
            DEFAULT_KEY = obtainKey(DEFAULT_SECRET_KEY);
        }
     
        /**
         * 获得key
         **/
        public static Key obtainKey(String key) {
            if (key == null) {
                return DEFAULT_KEY;
            }
            KeyGenerator generator = null;
            try {
                generator = KeyGenerator.getInstance(DES);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            generator.init(new SecureRandom(key.getBytes()));
            Key key1 = generator.generateKey();
            generator = null;
            return key1;
        }
     
        /**
         * 加密<br>
         * String明文输入,String密文输出
         */
        public static String encode(String str) {
            return encode(null, str);
        }
     
        /**
         * 加密<br>
         * String明文输入,String密文输出
         */
        public static String encode(String key, String str) {
            return Base64.encodeBase64URLSafeString(obtainEncode(key, str.getBytes()));
            // return Hex.encodeHexString(obtainEncode(key, str.getBytes()));
            // 可以转化为16进制数据
        }
     
        /**
         * 解密<br>
         * 以String密文输入,String明文输出
         */
        public static String decode(String str) {
            return decode(null, str);
        }
     
        /**
         * 解密<br>
         * 以String密文输入,String明文输出
         */
        public static String decode(String key, String str) {
            return new String(obtainDecode(key, Base64.decodeBase64(str)));
            // 可以转化为16进制的数据
    //      try {
    //          return new String(obtainDecode(key, Hex.decodeHex(str.toCharArray())));
    //      } catch (DecoderException e) {
    //          // TODO Auto-generated catch block
    //          e.printStackTrace();
    //      }
        }
     
        /**
         * 加密<br>
         * 以byte[]明文输入,byte[]密文输出
         */
        private static byte[] obtainEncode(String key, byte[] str) {
            byte[] byteFina = null;
            Cipher cipher;
            try {
                Key key1 = obtainKey(key);
                cipher = Cipher.getInstance(DES);
                cipher.init(Cipher.ENCRYPT_MODE, key1);
                byteFina = cipher.doFinal(str);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cipher = null;
            }
            return byteFina;
        }
     
        @Override
        public int hashCode() {
            return super.hashCode();
        }
     
        /**
         * 解密<br>
         * 以byte[]密文输入,以byte[]明文输出
         */
        private static byte[] obtainDecode(String key, byte[] str) {
            Cipher cipher;
            byte[] byteFina = null;
            try {
                Key key1 = obtainKey(key);
                cipher = Cipher.getInstance(DES);
                cipher.init(Cipher.DECRYPT_MODE, key1);
                byteFina = cipher.doFinal(str);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cipher = null;
            }
            return byteFina;
        }
     
        public static void main(String[] args) {
            String a = "root";
    //        String key = "yang测试";
            System.out.println(a);
            String m = encode(a);
            System.out.println(m);
            String n = decode(m);
            System.out.println(n);
        }
    
    --------------------- 
    作者:yang1393214887 
    来源:CSDN 
    原文:https://blog.csdn.net/yang1393214887/article/details/83411051 
    

      

  • 相关阅读:
    python定时任务:apscheduler的使用(还有一个celery~)
    Python定时任务-schedule vs. Celery vs. APScheduler
    结合Django+celery二次开发定时周期任务
    The Django Book 2.0--中文版
    第十二章: 部署Django
    Django扩展自定义manage命令
    使用django-extension扩展django的manage――runscript命令
    Django | 执行项目下指定的脚本
    C语言宏定义技巧——多次包括头文件内容不同
    《Java并发编程实战》第十章 避免活跃性危急 读书笔记
  • 原文地址:https://www.cnblogs.com/Zhangchuanfeng1/p/11195844.html
Copyright © 2011-2022 走看看