美文网首页
加密算法 - 摘要算法hash算法

加密算法 - 摘要算法hash算法

作者: GTMYang | 来源:发表于2023-08-28 15:17 被阅读0次

    摘要算法hash算法 (变长变定长,不能还原,MD5、SHA、CRC )

    它是不可逆的,不可以解密。所以它只能算的上是一种单向加密算法

    名称 安全性 速度
    SHA-1
    MD5
    • MD5(Message-Digest Algorithm 5(信息-摘要算法5)):用的是哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。
    public static final byte[] computeMD5(byte[] content) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            return md5.digest(content);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
    
    • SHA1(Secure Hash Algorithm 1):比MD5安全性高,但速度相对于MD5慢,对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。
    public static byte[] computeSHA1(byte[] content) {
        try {
            MessageDigest sha1 = MessageDigest.getInstance("SHA1");
            return sha1.digest(content);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
    
    • HMAC(Hash Message Authentication Code): 密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。
      HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。
    @NotThreadSafe
    public class HMacHelper {
        private static final Logger logger = LoggerFactory.getLogger(HMacHelper.class);
        private Mac mac;
     
        /**
         * MAC算法可选以下多种算法
         * HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512
         */
        private static final String KEY_MAC = "HmacMD5";
        public HMacHelper(String key) {
            try {
                SecretKey secretKey = new SecretKeySpec(key.getBytes(ConstField.UTF8), KEY_MAC);
                mac = Mac.getInstance(secretKey.getAlgorithm());
                mac.init(secretKey);
            } catch (Exception e) {
                logger.error("create hmac helper failed.", e);
            }
        }
        public byte[] sign(byte[] content) {
            return mac.doFinal(content);
        }
        
        public boolean verify(byte[] signature, byte[] content) {
            try {
                byte[] result = mac.doFinal(content);
                return Arrays.equals(signature, result);
            } catch (Exception e) {
                logger.error("verify sig failed.", e);
            }
            return false;
        }
    }
    

    相关文章

      网友评论

          本文标题:加密算法 - 摘要算法hash算法

          本文链接:https://www.haomeiwen.com/subject/rpvgmdtx.html