java 加密解密

信息安全关乎到方方面面。本文介绍java开发中常见的加密解密算法以及对应的使用

MessageDigest简介

MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值

注意

通过MessageDigest.getInstance("xx")不是单实例的.使用==进行判断的时候,并不相等。

使用步骤:

  • 生成MessageDigest对象
    1
    MessageDigest m=MessageDigest.getInstance("MD5");

注意参数的字符串是不区分大小写的

  • 传入需要计算的字符串
    1
    m.update(x.getBytes("UTF8"));

其中x需要计算的字符串当然可以使用默认的编码,并不需要指定编码

  • 计算消息摘要(即:散列码)
    1
    byte s[ ]=m.digest( );

digest()函数,还可以接受参数,如:

1
public  int digest(byte[] buf,  int offset,  int len);

使用buf作为缓冲区

  • 最后对byte[]数组进行转换处理
    转换成16进制字符串
    1
    2
    3
    4
    5
    6
    7
    static String convertToHexString(byte data[]) {
    StringBuffer strBuffer = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
    strBuffer.append(Integer.toHexString(0xff & data[i]));
    }
    return strBuffer.toString();
    }

很简单使用Integer.toHexString自带的将转换16进制

注意:Integer.toHexString函数

显示一个byte型的单字节十六进制(两位十六进制表示)的编码的时候,应该这样传入参数:

1
Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00)

  • byteVar & 0x000000FF的作用:

    如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响

  • (...) | 0xFFFFFF00的作用是

    如果byteVar 是正数,则置前24位为一,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可

  • 注意:0x000000FF的简写:0xFF

DES加密

核心代码:

1
2
3
SecretKeyFactory keyFactory =SecretKeyFactory.getInstance("DES");
SecretKey securekey =keyFactory.generateSecret(desKey);
return securekey;

资料参考:

【推荐】JAVA基础◆浅谈3DES加密解密
常用加密算法的Java实现总结(二)
常用加密算法的Java实现(一)