HMACSHA加密方法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: HMACSHA加密方法
 /** 计算签名 */
  public String getSign(Map<String, String> params)
      throws UnsupportedEncodingException {
    TreeMap<String, String> map = Maps.newTreeMap();
    map.putAll(params);
    TreeSet<String> treeSet = Sets.newTreeSet();
    for (Map.Entry<String, String> entry : map.entrySet()) {
      treeSet.add(
          URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.name())
              + "="
              + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()));
    }
    String join = String.join("&", treeSet);
    join = join.replace("+", "%20");
    join = join.replace("*", "%2A");
    join = join.replace("~", "%7E");
    String code = URLEncoder.encode(join, StandardCharsets.UTF_8.name());
    code = code.toUpperCase();
    byte[] hmac = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, secretAccessKey + "&").hmac(code);
    return Base64.getEncoder().encodeToString(hmac);
  }
Map<String, String> paramMap = new HashMap<>();
        List<String> keyList = new ArrayList<>();
        for (String param : params) {
            String[] kv = param.split("\\=", 2);
            keyList.add(kv[0]);
            paramMap.put(kv[0], kv.length > 0 ? kv[1] : "");
        }

        keyList.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });

        String stringToSign = method.toUpperCase() + accessKey + timeStamp + uuid;
        for (String key : keyList) {
            stringToSign += key;
            stringToSign += paramMap.get(key);
        }

        Mac hmacSha256 = Mac.getInstance("HmacSHA256");
        byte[] keyBytes = accessKey.getBytes(StandardCharsets.UTF_8);
        hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
        String sign = new String(
                Base64.getEncoder().encode(hmacSha256.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8))));
    
MD5加密:

String stringToSign = accessKey + accessSecret + timeStamp;
java.security.MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] signature = null;
        signature = md5.digest(stringToSign.getBytes(StandardCharsets.UTF_8));
String ret = bytes2String(signature);

public static String bytes2String(byte[] signature) {
        char[] chars = new char[signature.length * 2];
        int i = 0;
        for (byte sig : signature) {
            chars[i++] = HEX_CHARS[(sig & 0xFF) >> 4];
            chars[i++] = HEX_CHARS[sig & 0xF];
        }
        return new String(chars);
    }
相关文章
|
9月前
|
安全 API 开发工具
oss加密的配置方法
阿里云OSS提供多种加密选项:SSE-OSS(默认或对象级AES-256加密)、SSE-KMS(使用KMS托管CMK)、临时密钥加密和客户端加密(CSE)。可通过控制台或API设置Bucket策略,使用HTTP头部指定加密方式。KMS和临时密钥可能涉及更复杂的密钥管理和权限配置。
825 5
|
存储 数据挖掘 数据安全/隐私保护
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题
140 1
|
存储 算法 Java
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(下)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
137 1
|
数据安全/隐私保护 Python
Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)
Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)
402 0
|
6天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
28 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
4月前
|
存储 安全 Java
|
4月前
|
算法 安全 数据安全/隐私保护
链接加密的方法有哪些?
【10月更文挑战第6天】链接加密的方法有哪些?
447 10
|
4月前
|
安全 数据安全/隐私保护 开发者
保护敏感数据:使用Python加密数据的实用方法
保护敏感数据是一项基本的安全实践,Python通过上述库提供了强大的加密工具来实现这一目标。选择哪种方法取决于具体的应用场景和安全需求:对称加密(如AES)适合快速处理大量数据,而非对称加密(如RSA)更适合安全地交换密钥或进行身份验证。哈希函数则用于验证数据的完整性和一致性。通过合理使用这些技术,开发者可以大大增强其应用程序的安全性。
124 0
|
6月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
8月前
|
数据安全/隐私保护 算法 安全
数据加密有哪些方法?
【6月更文挑战第2天】数据加密有哪些方法?
155 3

热门文章

最新文章