不同语言使用HMAC SHA256创建base64哈希加密

2024-02-04 20:32

本文主要是介绍不同语言使用HMAC SHA256创建base64哈希加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:https://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/#java

Javascript HMAC SHA256

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha256.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script><script>var hash = CryptoJS.HmacSHA256("Message", "secret");var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);document.write(hashInBase64);
</script>

PHP HMAC SHA256

$s = hash_hmac('sha256', 'Message', 'secret', true);
echo base64_encode($s);

Java HMAC SHA256

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;public class ApiSecurityExample {public static void main(String[] args) {try {String secret = "secret";String message = "Message";Mac sha256_HMAC = Mac.getInstance("HmacSHA256");SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");sha256_HMAC.init(secret_key);String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));System.out.println(hash);}catch (Exception e){System.out.println("Error");}}
}

Groovy HMAC SHA256

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;def hmac_sha256(String secretKey, String data) {try {Mac mac = Mac.getInstance("HmacSHA256")SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256")mac.init(secretKeySpec)byte[] digest = mac.doFinal(data.getBytes())return digest} catch (InvalidKeyException e) {throw new RuntimeException("Invalid key exception while converting to HMac SHA256")}
}def hash = hmac_sha256("secret", "Message")
encodedData = hash.encodeBase64().toString()
log.info(encodedData)

C# HMAC SHA256

using System.Security.Cryptography;namespace Test
{public class MyHmac{private string CreateToken(string message, string secret){secret = secret ?? "";var encoding = new System.Text.ASCIIEncoding();byte[] keyByte = encoding.GetBytes(secret);byte[] messageBytes = encoding.GetBytes(message);using (var hmacsha256 = new HMACSHA256(keyByte)){byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);return Convert.ToBase64String(hashmessage);}}}
}


Objective C and Cocoa HMAC SHA256

#import "AppDelegate.h"
#import <CommonCrypto/CommonHMAC.h>@implementation AppDelegate- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {NSString* key = @"secret";NSString* data = @"Message";const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);NSData *hash = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];NSLog(@"%@", hash);NSString* s = [AppDelegate base64forData:hash];NSLog(s);
}+ (NSString*)base64forData:(NSData*)theData {const uint8_t* input = (const uint8_t*)[theData bytes];NSInteger length = [theData length];static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];uint8_t* output = (uint8_t*)data.mutableBytes;NSInteger i;for (i=0; i < length; i += 3) {NSInteger value = 0;NSInteger j;for (j = i; j < (i + 3); j++) {value <<= 8;if (j < length) {  value |= (0xFF & input[j]);  }  }  NSInteger theIndex = (i / 3) * 4;  output[theIndex + 0] = table[(value >> 18) & 0x3F];output[theIndex + 1] = table[(value >> 12) & 0x3F];output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';}return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; }@end

Go programming language - Golang HMAC SHA256

package mainimport ("crypto/hmac""crypto/sha256""encoding/base64""fmt"
)func ComputeHmac256(message string, secret string) string {key := []byte(secret)h := hmac.New(sha256.New, key)h.Write([]byte(message))return base64.StdEncoding.EncodeToString(h.Sum(nil))
}func main() {fmt.Println(ComputeHmac256("Message", "secret"))
}

Ruby HMAC SHA256

require 'openssl'
require "base64"hash  = OpenSSL::HMAC.digest('sha256', "secret", "Message")
puts Base64.encode64(hash)


Python (2.7) HMAC SHA256

import hashlib
import hmac
import base64message = bytes("Message").encode('utf-8')
secret = bytes("secret").encode('utf-8')signature = base64.b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest())
print(signature)


Perl HMAC SHA256

use Digest::SHA qw(hmac_sha256_base64);
$digest = hmac_sha256_base64("Message", "secret");# digest is currently: qnR8UCqJggD55PohusaBNviGoOJ67HC6Btry4qXLVZc# Fix padding of Base64 digests
while (length($digest) % 4) {$digest .= '=';
}print $digest;
# digest is now: qnR8UCqJggD55PohusaBNviGoOJ67HC6Btry4qXLVZc=

Dart HMAC SHA256

import 'dart:html';
import 'dart:convert';
import 'package:crypto/crypto.dart';void main() {String secret = 'secret';String message = 'Message';List<int> secretBytes = UTF8.encode('secret');List<int> messageBytes = UTF8.encode('Message');var hmac = new HMAC(new SHA256(), secretBytes);hmac.add(messageBytes);var digest = hmac.close();var hash = CryptoUtils.bytesToBase64(digest);// output to html pagequerySelector('#hash').text = hash;// hash => qnR8UCqJggD55PohusaBNviGoOJ67HC6Btry4qXLVZc=
}

Powershell (Windows) HMAC SHA256

$message = 'Message'
$secret = 'secret'$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($secret)
$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($message))
$signature = [Convert]::ToBase64String($signature)echo $signature# Do we get the expected signature?
echo ($signature -eq 'qnR8UCqJggD55PohusaBNviGoOJ67HC6Btry4qXLVZc=')


这篇关于不同语言使用HMAC SHA256创建base64哈希加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678712

相关文章

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式