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);
            }
        }
    }
    
    
  • 相关阅读:
    iOS 代码规范
    Clang Format
    PullToRefreshListView手动刷新问题
    android不依赖具体activity弹出Dialog对话框,即全局性对话框
    我的手机华为荣耀7,运行android程序不输出Log
    Android从imageview中获得bitmap
    Fragment里面的ViewPager嵌套subFragment,主Fragment切换的时候subFragment出现空白Fragment的Bug
    解决某些手机RadioGroup中的RadioButton不居中的问题
    Android权限大全
    UML类图
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12365055.html
Copyright © 2011-2022 走看看