zoukankan      html  css  js  c++  java
  • [java]求数据的hmac sha1的并用base64编码

    hmac

    通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口令是否正确,我们用保存在数据库中的password_md5对比计算md5(password)的结果,如果一致,用户输入的口令就是正确的。

    为了防止黑客通过彩虹表根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样,大大增加了黑客破解的难度。

    如果salt是我们自己随机生成的,通常我们计算MD5时采用md5(message + salt)。但实际上,把salt看做一个“口令”,加salt的哈希就是:计算一段message的哈希时,根据不通口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。

    这实际上就是Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。

    和我们自定义的加salt算法不同,Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

    要计算数据的hamc sha1且base64 encode

    python实现

    key = "123456789"
    data = "abc"
    import hmac
    import base64
    import hashlib
    
    data = hmac.new(key.encode(), data.encode(), digestmod=hashlib.sha1)
    print(data)
    msg = data.digest()
    print(msg)
    base64.b64encode(msg)
    

    java实现

    import javax.crypto.spec.SecretKeySpec;
    
    import javax.crypto.Mac;
    import java.util.Base64;
    
    public class MethodDemo {
        public static void main(String[] args) {
            var key = "123456789";
            var data = "abc";
            var s = hamcsha1(data, key);
            System.out.println(getBase64String(s));
    
        }
    
        public static String getBase64String(byte[] s) {
            return Base64.getEncoder().encodeToString(s);
        }
    
        public static byte[] hamcsha1(String data, String key) {
            try {
                SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
                Mac mac = Mac.getInstance("HmacSHA1");
                mac.init(signingKey);
                return mac.doFinal(data.getBytes());
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    
  • 相关阅读:
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    mysql备份及恢复
    mysql备份及恢复
    mysql备份及恢复
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12365055.html
Copyright © 2011-2022 走看看