aliyun Rest ful api V3版本身份验证构造
aliyun Rest ful api V3版本身份验证构造
参考官网:https://help.aliyun.com/zh/sdk/product-overview/v3-request-structure-and-signature?spm=a2c4g.11186623.0.0.787951e7lHcjZb
构造代码 :使用GET请求进行构造,算法使用sha256 使用postman进行验证
代码如下,linux环境运行,先安装openssl库:
#include <iostream>
#include <sstream>
#include <iomanip>
#include <cstring>
#include <random>
#include <chrono>
#include <cctype>
#include <iomanip>
#include <openssl/hmac.h>
#include <openssl/sha.h>
// HMAC-SHA256 calculation using OpenSSL library
//build,在Linux下编译 : g++ -o a.out awsSignature.cpp -std=c++11 -lssl -lcrypto
std::string HMAC_SHA256(const std::string& key, const std::string& data) {unsigned char result[EVP_MAX_MD_SIZE];unsigned int result_len;HMAC(EVP_sha256(), key.c_str(), key.length(),reinterpret_cast<const unsigned char*>(data.c_str()), data.length(),result, &result_len);std::stringstream ss;for (unsigned int i = 0; i < result_len; i++) {ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(result[i]);}return ss.str();
}
// AWS Signature Version 4 calculation
std::string CalculateAWSV4Signature(const std::string& secretAccessKey, const std::string& region,const std::string& service, const std::string& timestamp,const std::string& payloadHash, const std::string& canonicalRequest) {// Step 1: Derive signing keystd::string kDate = HMAC_SHA256("AWS4" + secretAccessKey, timestamp.substr(0, 8));std::string kRegion = HMAC_SHA256(kDate, region);std::string kService = HMAC_SHA256(kRegion, service);std::string kSigning = HMAC_SHA256(kService, "aws4_request");// Step 2: Calculate signaturestd::string stringToSign = "AWS4-HMAC-SHA256\n" + timestamp + "\n" + timestamp.substr(0, 8) +"/" + region + "/" + service + "/aws4_request\n" + HMAC_SHA256(kSigning, canonicalRequest + "\n" + payloadHash);std::string signature = HMAC_SHA256(kSigning, stringToSign);return signature;
}std::string calculateHash(const std::string& data) {unsigned char hash[SHA256_DIGEST_LENGTH];SHA256_CTX sha256;SHA256_Init(&sha256);SHA256_Update(&sha256, data.c_str(), data.length());SHA256_Final(hash, &sha256);std::stringstream ss;for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);}return ss.str();
}
std::string CanonicalizeRequest(const std::string& HTTPMethod, const std::string& CanonicalUri, const std::string& CanonicalQueryString, const std::string& CanonicalHeaders, const std::string& SignedHeaders, const std::string& payload)
{std::string canonicalize_string= HTTPMethod + "\n" +"/"+CanonicalUri + "\n" +CanonicalQueryString + "\n" +CanonicalHeaders + "\n" +SignedHeaders + "\n" +payload;return canonicalize_string;
}
std::string generateSignatureNonce() {// 使用 std::random_device 获取真正的随机数种子std::random_device rd;// 使用 std::mt19937 作为伪随机数生成器引擎std::mt19937 gen(rd());// 使用 std::uniform_int_distribution 来生成范围内的随机数std::uniform_int_distribution<> dis(0, 999999);// 生成随机数int nonceValue = dis(gen);// 将随机数转换为字符串std::ostringstream oss;oss << nonceValue;return oss.str();
}
std::string GetDate(int t){std::chrono::system_clock::time_point now_time = std::chrono::system_clock::now();std::time_t now_t = std::chrono::system_clock::to_time_t(now_time);std::tm gm_time = *std::gmtime(&now_t);char buf[128];if(t==1)std::strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S GMT", &gm_time);else{std::strftime(buf, sizeof(buf), "%FT%TZ", &gm_time);}std::string time(buf);return time;
}std::string UrlEncode(std::string& url){std::ostringstream encoded;encoded << std::hex << std::uppercase << std::setfill('0');for (char ch : url) {if (std::isalnum(ch) || ch == '-' || ch == '_' || ch == '.' || ch == '~') {// 字母数字字符和"- _ ."波浪符号保持不变encoded << ch;} else {// 其他字符进行百分号编码encoded << '%' << std::setw(2) << static_cast<int>(static_cast<unsigned char>(ch));}}return encoded.str();
}
int main() {// AWS credentials and request detailsstd::string accessKeyId = "你们密钥id";std::string secretAccessKey = "你的密钥";std::string region = "cn-shanghai";std::string param = "RegionId";std::string version="2014-05-26";std::string timestamp =GetDate(2);std::cout<<"timestamp: "<<timestamp<<std::endl;std::string canonicalRequest = "";std::string GMTime=GetDate(1);//GMT=1std::cout<<"GMTime"<<GMTime<<std::endl;//规范化请求构建参数std::string signature_nonce=generateSignatureNonce();std::cout<<signature_nonce<<std::endl;std::string HTTPRequestMethod="GET";std::string CanonicalURI ="";std::string CanonicalQueryString=UrlEncode(param)+"="+UrlEncode(region);//升序 url编码std::string CanonicalHeaders="host:ecs.cn-shanghai.aliyuncs.com\nx-acs-action:DescribeInstances\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:"+timestamp+"\nx-acs-signature-nonce:"+signature_nonce+"\nx-acs-version:"+version+"\n";std::string SignedHeaders="host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version";std::string HashedRequestPayload="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";//获取规范化请求值std::string CanonicalRequestString=CanonicalizeRequest(HTTPRequestMethod,CanonicalURI,CanonicalQueryString,CanonicalHeaders,SignedHeaders,HashedRequestPayload);std::cout<<CanonicalRequestString<<std::endl;//计算规范化请求的hash值std::string hashCanonicalRequest=calculateHash(CanonicalRequestString);std::string StringToSign="ACS3-HMAC-SHA256\n"+hashCanonicalRequest;//. 计算signaturestd::string signature = HMAC_SHA256(secretAccessKey,StringToSign);std::cout << "signature: " << signature << std::endl;return 0;
}
然后打开postman:

将算出来的信息在这里赋值,包含唯一随机数、时间、还有signature

然后 over

相关文章:
aliyun Rest ful api V3版本身份验证构造
aliyun Rest ful api V3版本身份验证构造 参考官网:https://help.aliyun.com/zh/sdk/product-overview/v3-request-structure-and-signature?spma2c4g.11186623.0.0.787951e7lHcjZb 构造代码 :使用GET请求进行构造,算法使用sha256 使用postm…...
windows10上使用Visual Studio对树莓派进行交叉编译示例
本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机: 系统:Windows10 开发平台:Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…...
flutter开发web应用支持浏览器跨域设置
开发web应用难免会遇到跨域问题,所以flutter设置允许web跨域的设置是要在你的flutter安装路径下面 flutter\bin\cache 找到flutter_tools.stamp文件,然后删除掉:这个文件是临时缓存文件 然后找到 flutter\packages\flutter_tools\lib\src\web…...
C#调用C++动态库接口函数和回调函数方法
这篇文章主要介绍了C#调用C动态库接口函数和回调函数方法,通过C端编写接口展开内容,文章介绍详细具有一定的参考价值,需要的小伙伴可以参考一下 需求: 当前C已经写好了一个动态库,完成了产品开发需求,C#需要调用C编写…...
3D造型渲染软件DAZ Studio mac中文版介绍
DAZ Studio mac是一款3D造型和渲染软件,由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境,让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…...
破解tomcat密码并上传webshell
tomcat基础认证爆破 暴力破解 进入vulnhub的tomcat8目录,启动环境 由于tomcat密码默认最大尝试错误次数为5次,需要修改server.xml,修改下面字段 failureCount"10000000000" lockOutTime"0"tomcat默认界面,…...
Java 8 Stream 的使用场景
Java 8 Stream 的使用场景 只符合所筛选条件至多一条 CommonArea l common.stream().filter(item ->item.getName().equals("aa")).findAny().orElse(null);返回多条记录 List<Object> list common.stream().filter(item -> item.getName().equals(&…...
图片转换到PDF
把一系列图片整合到PDF格式 Python代码 import os from io import BytesIO from PIL import Imageos.environ[NLS_LANG] SIMPLIFIED CHINESE_CHINA.UTF8 SUPPORT_SUFFIX ["jpg", "jpeg", "png"]def pic_to_pdf(image_bytes: bytes) -> byt…...
代码模版-实现重置按钮清空表单数据,vue+elementUI
文章目录 界面代码 界面 页面上可能会有「搜索」按钮 也会有「重置」按钮 重置 btn 的作用是为了清空前面 form 表单中的数据 代码 我们使用 elementUI vue 来做 解释:我们在 el-form 组件中加上 ref"searchFormRef",后续 js 中通过 thi…...
人格障碍在线测试,人格障碍筛查和判断 PDQ-4+
每个人都是独一无二的,每个人都存在人格上的偏差,日常生活中我们携带着自己的人格在忙碌,在不够成对学习、生活和工作的影响下,我们认为都是健康的人格,反之则属于人格障碍。 人格障碍给我们的日常生活带来极大的影响…...
redis相关文章汇总
一、redis结构 1-redis-功能分类 跳转 redis数据结构对比跳转 以下链接忽略: 01-Redis数据结构-汇总跳转 02-Redis数据结构-List跳转 03-Redis数据结构-dict跳转 二、redis问题攻克难点 缓存穿透、缓存雪崩、缓存击穿区别和解决方案跳转 DB和缓存一致性的问题…...
安防监控展示预约小程序的作用如何
监控在生活中的用途非常广泛,普遍应用于小区门户、商业大厦、产业基地、家庭、汽车等场景中,市场需求较大,同时随着科技发展,安防监控产品更新迭代也比较快,衍生出的经销店、安装技术工等产业近些年也比较火。 安防监…...
(Matalb回归预测)WOA-BP鲸鱼算法优化BP神经网络的多维回归预测
目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分代码: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平台编译,将WOA(鲸鱼算法)与BP神…...
某头部通信企业:SDLC+模糊测试,保障数实融合安全发展
某头部通信企业是全球领先的综合通信信息解决方案提供商,为全球电信运营商、政企客户和消费者提供创新的技术与产品解决方案。该企业持续关注核心技术攻关,深入打造系列化标杆项目和价值场景,加强数字化平台的推广应用,加快共建开…...
【fbtft】如何添加fbtft驱动
获取lcd ic的datasheet,或者直接找到其他平台(linux,stm32,esp32)的驱动 我用的是合宙的esp32驱动,注意是c语言的,合宙上层用lua封装了,需要找到sdk源码。 源码路径: …...
【2023云栖】郭瑞杰:阿里云搜索产品智能化升级
本文根据 2023 云栖大会演讲实录整理而成,演讲信息如下: 演讲人:郭瑞杰 | 阿里云资深技术专家、搜索负责人 演讲主题:阿里云搜索产品智能化升级发布 近日在2023云栖大会上,阿里云搜索负责人郭瑞杰对阿里云搜索产品智…...
数据库事务相关问题
1. 什么是数据库事务? 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 …...
Digicert证书:您的网络安全守护神
在当今数字化的世界中,网络安全已经成为每一个企业和个人必须面对的问题。而Digicert品牌证书,就是您网络安全的最佳选择。它不仅具有强大的安全性和稳定性,还能广泛应用于各种场景,为您提供全方位的保护。 首先,我们要…...
LLM App ≈ 数据ETL管线
虽然现有的 LLM 应用程序工具(例如 LangChain 和 LlamaIndex)对于构建 LLM 应用程序非常有用,但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时,我能够感受到一些尚未开发和破解的方面的痛苦…...
k8s的error: metrics not available yet问题处理
kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求,需在k8s集群中使用 kubectl top node命令,但是一直报error: metrics not available yet错误。为了更好的复现问题&…...
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定每次UI微调就导致脚本大面积失效?分辨率变化让精心编写的自动化测试瞬间崩溃?作为从坐标点击转型到控件识别的实践者,我深刻理解这种挫败感。三年…...
如何优化 MySQL 千万级数据分页查询的性能?
它的本质是:**传统 LIMIT offset, size 在大数据量下性能急剧下降,是因为 MySQL 必须 扫描并丢弃 前 offset 行数据。当 offset 很大时(如 LIMIT 1000000, 10),MySQL 需要读取 1,000,010 行记录,执行 1,000…...
基于CNN的食双星光变曲线自动化参数初估模型EBOP MAVEN
1. 项目概述与核心价值在恒星天体物理领域,食双星系统一直扮演着“宇宙实验室”的关键角色。通过分析两颗恒星相互绕转时周期性相互遮挡产生的光变曲线,我们可以像解谜一样,精确反演出恒星的质量、半径、轨道倾角等基本物理参数。这些参数是构…...
原来专业的赛事专用匹克球厂家有这么多门道?
引言在匹克球运动蓬勃发展的当下,专业赛事专用匹克球的选择至关重要。很多人可能不知道,看似普通的赛事专用匹克球背后,其实隐藏着诸多门道。接下来,我们就一起深入探究专业赛事专用匹克球厂家的秘密。核心技术与材料的门道专业赛…...
失传34年的南极DOS游戏LAN - LOK重见天日,背后藏着怎样的历史?
LAN - LOK:失传34年的南极DOS破坏游戏这是一次对历史进行重构(或许还会进行现代化改造)的尝试。AlphaPixel常处理遗留代码库,接触到80年代和90年代用各种方言和语言编写、存储在难处理容器和介质中的代码。因保密协议,…...
从B站缓存困境到MP4自由:m4s-converter完整解决方案
从B站缓存困境到MP4自由:m4s-converter完整解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当B站视频突然下架,那…...
Unity中文语言包安装失败?手动部署全流程详解
1. 为什么Unity编辑器中文语言包总在安装时“卡住”或报错? Unity编辑器自带多语言支持,但中文语言包的安装过程却常年被开发者吐槽——点开Preferences → Localization → Install Language Pack,选中Chinese (Simplified),点击…...
5步快速上手OpenVSP:免费开源的飞机参数化设计终极指南
5步快速上手OpenVSP:免费开源的飞机参数化设计终极指南 【免费下载链接】OpenVSP A parametric aircraft geometry tool 项目地址: https://gitcode.com/gh_mirrors/ope/OpenVSP OpenVSP是一款由NASA开发的免费开源飞机参数化设计工具,让航空工程…...
为什么你的DeepSeek沙箱被绕过了?揭秘3种未公开的上下文逃逸技术及熔断防护配置
更多请点击: https://kaifayun.com 第一章:DeepSeek沙箱安全机制概述 DeepSeek沙箱是一种面向大语言模型推理环境的轻量级隔离执行框架,旨在防止恶意代码逃逸、资源滥用及敏感数据泄露。其核心设计遵循最小权限原则与强边界隔离策略…...
终极鼠标连点器MouseClick:5分钟免费获取完整使用指南
终极鼠标连点器MouseClick:5分钟免费获取完整使用指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...
