• MD5—加密,加盐


    MD5的参考盐值:String salt = "212*)()()**()^&UYGbakdkj " ;
    MD5—加密工具类
    package com.demo.tools;
      import java.security.MessageDigest;
      import java.security.NoSuchAlgorithmException;
      
      /**
       * @author xdx14 MD5加密工具类
       */
      public class MD5Utils {
     
         /**
          * 获取32位数的MD5加密
          * 
          * @param pwd
          *            需要加密的字符串
          * @return String字符串 加密后的字符串
          */
         public static String getPwd(String pwd) {
             try {
                 // 创建加密对象MessageDigest
                 // 提供信息摘要算法的功能,如 MD5 或 SHA 算法。
                 // 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
                 MessageDigest digest = MessageDigest.getInstance("md5");
                 
                 
                 
                 // 调用加密对象的方法,加密的动作已经完成
                 byte[] bs = digest.digest(pwd.getBytes());
                 // 接下来,我们要对加密后的结果,进行优化,按照mysql的优化思路走
                 // mysql的优化思路:
                 // 第一步,将数据全部转换成正数:
                 String hexString = "";
                 for (byte b : bs) {
                     // 第一步,将数据全部转换成正数// 解释:为什么采用b&255
                     /*
                      * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
                      * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
                      * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
                      * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
                      * 0000 0000 1001 1100 此时的temp是一个int类型的整数
                      */
                     int temp = b & 255;
                     // 第二步,将所有的数据转换成16进制的形式
                     // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
                     // 因此,需要对temp进行判断
                     if (temp < 16 && temp >= 0) {
                         // 手动补上一个“0”
                         //static String toHexString(int i)
                         //以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
                         hexString = hexString + "0" + Integer.toHexString(temp);
                        
                         //补充:
                         //static String  toString(int i, int radix) 返回用第二个参数指定基数表示的第一个参数的字符串表示形式
                         //static Integer valueOf(String s, int radix) 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
                         //补充结束!
                         
                         
                     } else {
                         hexString = hexString + Integer.toHexString(temp);
                     }
                 }
                 return hexString;
             } catch (NoSuchAlgorithmException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             return "";
         }
     
         /**
          * @param args
          */
         public static void main(String[] args) {
             String pwd = MD5Utils.getPwd("111");
             System.out.println(pwd);
         }
     
     }

  • 相关阅读:
    c语言网络编程过程及函数说明
    c代码编译完整过程详解
    const关键字的常见作用
    c语言中static关键字的几个作用
    c语言结构体中字节对齐方式
    modbus协议数据格式
    CodeForces
    如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、unordered_map、unordered_set、auto
    关于lower_bound( )和upper_bound( )的常见用法
    CodeForces 600C——思维
  • 原文地址:https://www.cnblogs.com/domi22/p/8059590.html
Copyright © 2020-2023  润新知