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 
    

      

  • 相关阅读:
    整数
    mysql-5.7.13-win32 安装
    Flex air修改外部xml文件 (转)
    JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
    C#中&和&&的区别
    百度UEditor1.4.3编辑器和asp.net MVC 5结合
    ASP.NET MVC ajax数组,模型绑定问题。
    MEF依赖注入无法在在构造函数中使用的解决办法
    AJaxFileUpload 文件上传<pre>,json字符串为空解决方法
    C#中字符串转换为IPAdress
  • 原文地址:https://www.cnblogs.com/Zhangchuanfeng1/p/11195844.html
Copyright © 2011-2022 走看看