java中常用的摘要算法

一,摘要算法
作用:验证数据完整性(登录注册、文件校验)

常用的摘要算法有:MD5 ;SHA1,SHA224等SHA系列;HmacSHA1等mac算法
代码实现:

如 MD5

	 /**
     * @param input 输入
     * @return 返回16个字节
     * @throws Exception
     */
    public static byte[] MD5(byte[] input) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] out = md5.digest(input);
        return out;
    }

使用 :
1>

String testStr="MD5测试";
byte[] result = MD5(testStr.getBytes("UTF-8"));
Log.e(TAG, "md5:" + BytesUtils.byte2HexStr(result));

打印结果:md5:B01FFB416289B51538A052CAA6428DE8 —>16个字节(打印对应的16进制)

2>

 result = MessageDigestUtils.MD5(Base64.decode(testStr,0));
 Log.e(TAG, "md5:" + Base64.encodeToString(result,0));

打印结果: md5:P0uE1AKvCKC9v+2kFE06vg== —> 16个字节(打印对应的Base64编码)

其他摘要算法实现:

/**
     * @param input 输入
     * @return 返回16个字节
     * @throws Exception
     */
    public static byte[] MD5(byte[] input) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] out = md5.digest(input);
        return out;
    }

    /**
     * @param input 输入
     * @return 返回20个字节
     * @throws Exception
     */
    public static byte[] SHA1(byte[] input) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-1");
        return sha256.digest(input);
    }

    /**
     * @param input 输入
     * @return 返回28个字节
     * @throws Exception
     */
    public static byte[] SHA224(byte[] input) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-224");
        return sha256.digest(input);
    }

    /**
     * @param input 输入
     * @return 返回32个字节
     * @throws Exception
     */
    public static byte[] SHA256(byte[] input) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
        return sha256.digest(input);
    }

    /**
     * @param input 输入
     * @return 返回48个字节
     * @throws Exception
     */
    public static byte[] SHA384(byte[] input) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-384");
        return sha256.digest(input);
    }

    /**
     * @param input
     * @return 返回64个字节
     * @throws Exception
     */
    public static byte[] SHA512(byte[] input) throws Exception {
        MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
        return sha512.digest(input);
    }

    /**
     * HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 HmacSHAMD5 PBKDF2
     *
     * @param data
     * @param key
     * @return 返回20字节
     * @throws Exception
     */
    public static byte[] HmacSHA1(byte[] data, byte[] key) throws Exception {
        //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKeySpec secretKey = new SecretKeySpec(key, "HmacSHA1");
        //生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance("HmacSHA1");
        //用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        //完成 Mac 操作
        return mac.doFinal(data);
    }

其他的用于验证数据完整性方法:
1》 奇偶校验(Parity Check)
根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。
采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。
通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。

2 》bcc(block check character)异或校验法
把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的

3 》crc循环冗余校验(Cyclic Redundancy Check)
CRC 算法的基本思想是将传输的数据当做一个位数很长的数。
将这个数除以另一个数,得到的余数作为校验数据附加到原数据后面

  • 摘要算法工具类 MD (MD2、4、5)(2,4由于安全问题弃用)系列,
  • SHA 系列 SHA-1,SHA-224 和 SHA-256 适用于长度不超过 2^64 二进制位的消息。
  • SHA-384 和 SHA-512 适用于长度不超过 2^128 二进制位的消息

在线工具:在线摘要计算工具


此文要是对你有帮助,如果方便麻烦点个赞,谢谢!!!

猜你喜欢

转载自blog.csdn.net/kingyc123456789/article/details/79067330