HMACSHA1加密

HMACSHA1加密usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text usingSystem Security Cryptography usingSystem IO namespaceCon classProgram

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string str = "YKfuZFBpng594pRhgE81wFah"; string src = "AccessorId"; HMACSHA1 hmac = new HMACSHA1(); byte[] bs = System.Text.Encoding.UTF8.GetBytes(str); hmac.Key = bs; byte[] srcb = System.Text.Encoding.UTF8.GetBytes(src); byte[] result = hmac.ComputeHash(srcb); string strResult = Convert.ToBase64String(result); Console.WriteLine(strResult); Console.ReadLine(); } } }

 java版本

import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public class Util { private static final String HMAC_SHA1 = "HmacSHA1"; / * 生成签名数据 * * @param data 待加密的数据 * @param key 加密使用的key * * return 成功返回签名串,失败返回空串 */ public static String getSignature(String data,String key) { key = key.replace('-', '+'); key = key.replace('_', '/'); byte[] keyBytes=key.getBytes(); SecretKeySpec signingKey = new SecretKeySpec(keyBytes, HMAC_SHA1); try { Mac mac = Mac.getInstance(HMAC_SHA1); mac.init(signingKey); byte[] rawHmac = mac.doFinal(data.getBytes()); return encode64(rawHmac); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return ""; } / * rawurlEncode * * @param source * @return */ public static String rawurlEncode(String source, String encoding) throws UnsupportedEncodingException{ if(source == null){ return null; } source = URLEncoder.encode(source, encoding); source = source.replace("+", "%20"); return source; } /* private static String byteToHexString(byte ib){ char[] Digit={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; char[] ob=new char[2]; ob[0]=Digit[(ib>>>4)& 0X0f]; ob[1]=Digit[ib & 0X0F]; String s=new String(ob); return s; }*/ public static String encode64(byte[] raw) { StringBuffer encoded = new StringBuffer(); for (int i = 0; i < raw.length; i += 3) { encoded.append(encodeBlock(raw, i)); } return encoded.toString(); } protected static char[] encodeBlock(byte[] raw, int offset) { int block = 0; int slack = raw.length - offset - 1; int end = (slack >= 2) ? 2 : slack; for (int i = 0; i <= end; i++) { byte b = raw[offset + i]; int neuter = (b < 0) ? b + 256 : b; block += neuter << (8 * (2 - i)); } char[] base64 = new char[4]; for (int i = 0; i < 4; i++) { int sixbit = (block >>> (6 * (3 - i))) & 0x3f; base64[i] = getChar(sixbit); } if (slack < 1) base64[2] = '='; if (slack < 2) base64[3] = '='; return base64; } protected static char getChar(int sixBit) { if (sixBit >= 0 && sixBit <= 25) return (char)('A' + sixBit); if (sixBit >= 26 && sixBit <= 51) return (char)('a' + (sixBit - 26)); if (sixBit >= 52 && sixBit <= 61) return (char)('0' + (sixBit - 52)); if (sixBit == 62) return '+'; if (sixBit == 63) return '/'; return '?'; } public static byte[] decode64(String base64) { int pad = 0; for (int i = base64.length() - 1; base64.charAt(i) == '='; i--) pad++; int length = base64.length() * 6 / 8 - pad; byte[] raw = new byte[length]; int rawIndex = 0; for (int i = 0; i < base64.length(); i += 4) { int block = (getValue(base64.charAt(i)) << 18) + (getValue(base64.charAt(i + 1)) << 12) + (getValue(base64.charAt(i + 2)) << 6) + (getValue(base64.charAt(i + 3))); for (int j = 0; j < 3 && rawIndex + j < raw.length; j++) raw[rawIndex + j] = (byte)((block >> (8 * (2 - j))) & 0xff); rawIndex += 3; } return raw; } protected static int getValue(char c) { if (c >= 'A' && c <= 'Z') return c - 'A'; if (c >= 'a' && c <= 'z') return c - 'a' + 26; if (c >= '0' && c <= '9') return c - '0' + 52; if (c == '+') return 62; if (c == '/') return 63; if (c == '=') return 0; return -1; } }

 两者结果一致

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202224.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:36
下一篇 2026年3月20日 上午7:36


相关推荐

  • NodeJS入门(一)—nodejs详细安装步骤

    NodeJS入门(一)—nodejs详细安装步骤初学 NodeJS 就是要弄清楚什么是 nodejs 能做什么 怎么用 什么是 nodejs 脚本语言需要一个解析器才能运行 JavaScript 是脚本语言 在不同的位置有不一样的解析器 如写入 html 的 js 语言 浏览器是它的解析器角色 而对于需要独立运行的 JS nodejs 就是一个解析器 每一种解析器都是一个运行环境 不但允许 js 定义各种数据结构 进行各种计算 还允许 js 使用允许环境提

    2026年3月26日
    3
  • 联想推出OpenClaw部署服务:线上线下均可免费安装

    联想推出OpenClaw部署服务:线上线下均可免费安装

    2026年3月16日
    2
  • 【 linux如何查看cuda版本】

    【 linux如何查看cuda版本】linux 如何查看 cuda 版本终端输入 nvcc V 命令 即可查询到 CUDA 版本号

    2026年3月26日
    2
  • Java有哪些编程语言

    Java有哪些编程语言Java作为一种年轻具有活力的编程语言,在最近几年是越来越受到市场的欢迎。它作为面向网络的程序设计语言,用来让程序员创建应用程序。Java是个面向对象的语言,由于它自身具备的入门门槛低等优点。那么,Java编程语言具有什么优点?接下来,就跟着千锋重庆Java的小编一起来了解下吧!1.Java语言是简单的Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。Jav

    2022年7月7日
    24
  • Linux常用命令(面试题)

    Linux常用命令(面试题)Linux常用命令因为热爱,所以拼搏。–RuiDer常用指令ls  显示文件或目录-l列出文件详细信息l(list)-a列出当前目录下所有文件及目录,包括隐藏的a(all)mkdir创建目录-p创建目录,若…

    2022年6月1日
    44
  • vue父组件向子组件传值与传递方法「建议收藏」

    vue父组件向子组件传值与传递方法学习笔记1、父组件向子组件传值(props)在子组件中,默认是无法访问到父组件中的data上的数据和methods中的方法父组件可以在引用子组件的时候,通过属性绑定v-bind传递,子组件调用通过子组件属性props定义2、父组件向子组件传递方法(this.$emit())1、在子组件内通过绑定事件机制:@自定义方法名=“父组件方法名”2、子组件方法中,通过this.emit(“自定义方法名”),触发3、子组件调用方法myclick总结:1、父组

    2022年4月6日
    428

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号