java中MD5混淆

网站的密码等都需要进行加密后存入数据库,流行的方法采用的是MD5混淆,下面就这种方法做个简单的使用介绍。

    public static String stringMD5(String input) {

       try {
          // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
          MessageDigest messageDigest =MessageDigest.getInstance("MD5");
          // 输入的字符串转换成字节数组
          byte[] inputByteArray = input.getBytes();
          // inputByteArray是输入字符串转换得到的字节数组
          messageDigest.update(inputByteArray);
          // 转换并返回结果,也是字节数组,包含16个元素
          byte[] resultByteArray = messageDigest.digest();
          // 字符数组转换成字符串返回
          return byteArrayToHex(resultByteArray);
       } catch (NoSuchAlgorithmException e) {
          return null;
       }
    }  
   //将字节数组换成16进制的字符串
 public static String byteArrayToHex(byte[] byteArray) {
       // 首先初始化一个字符数组,用来存放每个16进制字符
       char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };
       // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
       char[] resultCharArray =new char[byteArray.length * 2];
       // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
       int index = 0;
       for (byte b : byteArray) {
          resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];
          resultCharArray[index++] = hexDigits[b& 0xf];
       }
       // 字符数组组合成字符串返回
       return new String(resultCharArray);
}

java.security中除了md5混淆外,还有SHA1等加密算法。除了对字符串进行处理,也可以对文件进行加密处理。

    public static String fileMD5(String inputFile) throws IOException {



          // 缓冲区大小(这个可以抽出一个参数)

          int bufferSize = 256 * 1024;

          FileInputStream fileInputStream = null;

          DigestInputStream digestInputStream = null;



          try {

             // 拿到一个MD5转换器(同样,这里可以换成SHA1)

             MessageDigest messageDigest =MessageDigest.getInstance("MD5");



             // 使用DigestInputStream

             fileInputStream = new FileInputStream(inputFile);

             digestInputStream = new DigestInputStream(fileInputStream,messageDigest);



             // read的过程中进行MD5处理,直到读完文件

             byte[] buffer =new byte[bufferSize];

             while (digestInputStream.read(buffer) > 0);



             // 获取最终的MessageDigest

             messageDigest= digestInputStream.getMessageDigest();



             // 拿到结果,也是字节数组,包含16个元素

             byte[] resultByteArray = messageDigest.digest();



             // 同样,把字节数组转换成字符串

             return byteArrayToHex(resultByteArray);



          } catch (NoSuchAlgorithmException e) {

             return null;

          } finally {

             try {

                digestInputStream.close();

             } catch (Exception e) {

             }

             try {

                fileInputStream.close();

             } catch (Exception e) {

             }

          }

       }  

可以参考如下文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值