常用的消息摘要包含 MD5,SHA1,SHA256,区别可见 wiki -- SHA家族
消息摘要的算法输出字节长度是确定的:
MD5 --> 128 bits
SHA1 --> 160 bits
SHA256 --> 256 bits
Java 中有 MessageDigest 类专门用来处理这样的需求,一般流程:
getInstance --> update --> digest
MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // or SHA-1, SHA-256 messageDigest.update(plainText.getBytes(StandardCharsets.UTF_8)); byte[] hashBytes = messageDigest.digest();
python3 对应的是 hashlib 库,一般流程
hashlib.算法名() --> update --> digest
由于一般都是直接看16进制字符串,可以简写为
hashlib.md5(plainText.encode('utf-8')).hexdigest()
摘要算法主要用来确保数据的完整性[Integrity], 本身不具备身份验证[Authentication]的功能,即在不添加其他要素的情况无法确定发送信息的人是可信任的,所以要达到身份验证的功能,一般要给发送方分配一个秘钥,双方约定按照某种方式先把秘钥或其他要素添加到原始信息中,再执行摘要算法。