不同语言使用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

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1