客户端如何进行HmacSHA256加密

2024-04-24 15:52

本文主要是介绍客户端如何进行HmacSHA256加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

开发了一个短信验证码接口,为了防止被攻击,在接口层面上加了一个签名。
签名的算法是使用HmacSHA256加密,Base64编码。

加密字符串就以【手机号】+【随机数】的格式举例。

客户端有Android、iOS、H5-js、小程序,都需要进行验签。

secret秘钥随机生成一个

XnvmtittKmvelZSIlmewagwxkWiSNFPn

各平台代码实现逻辑

iOS

import CryptoKitfunc generateSignature(data: String, key: String) -> String? {let key = SymmetricKey(data: key.data(using: .utf8)!)let signature = HMAC<SHA256>.authenticationCode(for: data.data(using: .utf8)!, using: key)return Data(signature).base64EncodedString()
}// 使用
let secret = "" // 后端提供
let data = mobile + nonce; // data是 手机号 + 随机数if let signature = generateSignature(data: data, key: secret) {print(signature)
}

Android

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;public String generateSignature(String data, String secretKey) throws Exception {Mac sha256_HMAC = Mac.getInstance("HmacSHA256");SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256");sha256_HMAC.init(secretKeySpec);return Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(data.getBytes()));
}// data是请求参数按照一定规则排序后拼接成的字符串
String secret = "" // 后端提供
String data = mobile + nonce; // data是 手机号 + 随机数String signature = generateSignature(data, secret);

H5-js

async function generateSignature(data, secretKey) {const encoder = new TextEncoder();const keyData = encoder.encode(secretKey);const dataToSign = encoder.encode(data);const key = await window.crypto.subtle.importKey("raw", keyData, { name: "HMAC", hash: { name: "SHA-256" } }, true, ["sign"]);const signature = await window.crypto.subtle.sign("HMAC", key, dataToSign);return window.btoa(String.fromCharCode(...new Uint8Array(signature)));
}// 使用示例
const secret = "" // 后端提供
const data = mobile + nonce; // data是 手机号 + 随机数generateSignature(data, secret).then(signature => console.log(signature));

小程序

小程序需要在小程序后台,第三方服务,插件管理中搜索并添加【crypto】

参考:https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html


// 在app.json中添加
"plugins": {"crypto": {"version": "0.0.003","provider": "wxxxxxxxxxx" // 替换成自己插件的id}
}// 引入代码
const crypto = requirePlugin("crypto");// 假设 data 是你要签名的数据,key 是你的密钥
const data = "data_to_sign";
const key = "secret_key";// 生成 HMAC SHA256 签名
function generateSignature(data, key) {let hmac256 = new crypto.HmacSHA256(data, key);return hmac256.toString(crypto.Base64);
}// 调用函数生成签名
generateSignature(data, key);

这篇关于客户端如何进行HmacSHA256加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

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

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

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获