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

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文