一,摘要算法
作用:验证数据完整性(登录注册、文件校验)
常用的摘要算法有: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 二进制位的消息
在线工具:在线摘要计算工具
此文要是对你有帮助,如果方便麻烦点个赞,谢谢!!!