当前位置: 首页 > news >正文

豆包生成C#即梦API HTTP调用实例代码

最近玩即梦AI,文生图,文生视频等等很多玩法都很强大。即梦本身页提供了API。官方文档里有Java, Golang, Python, PHP的SDK,官方也推荐使用SDK,调用SDK会比较省事儿。官方也提供了HTTP请求示例代码,但是也只包括Java, Golang, Python, PHP,没有C#。所以就尝试写个C#调用即梦API。调用的难点在于火山引擎API的签名生成。下面介绍一下即梦API的调用过程和使用豆包将Python HTTP示例代码转成C#代码。

1. 注册火山引擎账号,并开通即梦API图片生成服务,开通方式选择免费试用。免费调用时长限额是500秒,并发限额是1。参考新手指南--AI中台公用文档-火山引擎。这个文档中还包含了API访问密钥的生成方式,这个也是使用API必不可少的步骤。注意这个密钥自己妥善保管,不能泄露。

2. 账号开通完成,API访问密钥创建完成就可以开始代码了。我参考了Python的代码,Python代码下载下来,需要替换access_key和secret_key。本地装有Python环境,可以直接跑通。

3. 使用豆包的AI编程,把官方Python代码,贴进豆包提问,请豆包转成C#代码,稍等片刻,C#代码生成完毕。

4. 把C#代码Copy到VS,开始调试。我遇到的问题是:“The request signature we calculated does not match the signature you provided. Check your Secret Access Key and signing method. Consult the service documentation for details.”。是说,request签名,C#里计算的结果和火山引擎服务器计算的结果不一致。

5. 继续调试,通过和Python的签名结果对比,C#函数计算的签名其实是没有问题的,那么问题出在Http request。

6. 进一步调试,发现,这个API的POST request的Header里应该要包含如下内容,这里主要注意Content-Type。

POST 
Host: billing.volcengineapi.com
Content-Type: application/json
X-Date: 20250329T180937Z
Authorization: HMAC-SHA256 Credential=AKLTYWViMTVmZGYzM2E0NDI5Mzk2MDZjNjFmMjc2MjRjMzg/20250329/cn-beijing/billing/request, SignedHeaders=host;x-date, Signature=5e8480ceea12d0000a23c054151c50dd02c1a7dec835004057d19f13d53a7658

7. 往Http request加header,是通过下面的代码实现的。需要注意的是注释的部分,我调试的错误就是因为AI的代码额外加了Content的UTF8编码,导致服务器端计算的签名和C#计算的不匹配。

var headers = new Dictionary<string, string>{{"X-Date", currentDate},{"Authorization", authorizationHeader},{"X-Content-Sha256", payloadHash},{"Content-Type", contentType}};.......foreach (var header in headers)
{// 这里加header,Content-Type是加不进去的,它应该要被放在Content的header
    request.Headers.TryAddWithoutValidation(header.Key, header.Value);
}.......// 加到这里,注意这里一定要只包含Content-Type,不要包含任何编码格式
// AI生成的代码,可能会加上编码格式,导致,发送往服务器的Header Content-Type不完全是 “application/json”
request.Content = new StringContent(formattedBody, new System.Net.Http.Headers.MediaTypeHeaderValue(contentType));                    

8. 最终的调用类完整代码如下。

using Newtonsoft.Json;
using System.Security.Cryptography;
using System.Text;internal class VolcengineApiClient
{private readonly string _accessKey;private readonly string _secretKey;private readonly string _host;private readonly string _region;private readonly string _service;private readonly string _endpoint;private readonly HttpClient _httpClient;/// <summary>/// 初始化火山引擎API客户端/// </summary>/// <param name="accessKey">访问密钥</param>/// <param name="secretKey">密钥</param>/// <param name="host">API主机地址</param>/// <param name="region">区域</param>/// <param name="service">服务名称</param>public VolcengineApiClient(string accessKey, string secretKey,string host = "visual.volcengineapi.com",string region = "cn-north-1",string service = "cv"){_accessKey = accessKey ?? throw new ArgumentNullException(nameof(accessKey));_secretKey = secretKey ?? throw new ArgumentNullException(nameof(secretKey));_host = host ?? throw new ArgumentNullException(nameof(host));_region = region ?? throw new ArgumentNullException(nameof(region));_service = service ?? throw new ArgumentNullException(nameof(service));_endpoint = $"https://{_host}";_httpClient = new HttpClient();}/// <summary>/// 发送API请求/// </summary>/// <param name="method">HTTP方法</param>/// <param name="action">API动作</param>/// <param name="version">API版本</param>/// <param name="bodyParams">请求体参数</param>/// <param name="extraQueryParams">额外的查询参数</param>/// <returns>响应结果</returns>public async Task<string> SendRequestAsync(string method = "POST",string action = "CVProcess",string version = "2022-08-31",object bodyParams = null,Dictionary<string, string> extraQueryParams = null){// 准备查询参数var queryParams = new Dictionary<string, string>{{"Action", action},{"Version", version}};// 添加额外的查询参数if (extraQueryParams != null){foreach (var param in extraQueryParams){queryParams[param.Key] = param.Value;}}// 格式化查询参数string formattedQuery = FormatQueryParameters(queryParams);// 准备请求体string formattedBody = bodyParams != null ? JsonConvert.SerializeObject(bodyParams) : "{}";// 生成时间戳DateTime utcNow = DateTime.UtcNow;string currentDate = utcNow.ToString("yyyyMMddTHHmmssZ");string dateStamp = utcNow.ToString("yyyyMMdd");// 计算 payload hashstring payloadHash = ComputeSha256Hash(formattedBody);// 构建规范请求string canonicalUri = "/";string contentType = "application/json";string canonicalHeaders =$"content-type:{contentType}\n" +$"host:{_host}\n" +$"x-content-sha256:{payloadHash}\n" +$"x-date:{currentDate}\n";string signedHeaders = "content-type;host;x-content-sha256;x-date";string canonicalRequest = $"{method}\n{canonicalUri}\n{formattedQuery}\n{canonicalHeaders}\n{signedHeaders}\n{payloadHash}";// 计算签名string algorithm = "HMAC-SHA256";string credentialScope = $"{dateStamp}/{_region}/{_service}/request";string stringToSign = $"{algorithm}\n{currentDate}\n{credentialScope}\n{ComputeSha256Hash(canonicalRequest)}";byte[] signingKey = GetSignatureKey(_secretKey, dateStamp, _region, _service);string signature = ComputeHmacSha256(signingKey, stringToSign);// 构建授权头string authorizationHeader = $"{algorithm} Credential={_accessKey}/{credentialScope}, " +$"SignedHeaders={signedHeaders}, " +$"Signature={signature}";// 准备请求头var headers = new Dictionary<string, string>{{"X-Date", currentDate},{"Authorization", authorizationHeader},{"X-Content-Sha256", payloadHash},{"Content-Type", contentType}};// 构建请求URLstring requestUrl = $"{_endpoint}?{formattedQuery}";Console.WriteLine("\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++");Console.WriteLine($"Request URL = {requestUrl}");// 发送请求
        HttpResponseMessage response;try{using (var request = new HttpRequestMessage(new HttpMethod(method), requestUrl)){// 添加请求头foreach (var header in headers){request.Headers.TryAddWithoutValidation(header.Key, header.Value);}// 添加请求体if (method.Equals("POST", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(formattedBody)){request.Content = new StringContent(formattedBody, new System.Net.Http.Headers.MediaTypeHeaderValue(contentType));                    }response = await _httpClient.SendAsync(request);}string responseBody = await response.Content.ReadAsStringAsync();Console.WriteLine("\nRESPONSE++++++++++++++++++++++++++++++++++++");Console.WriteLine($"Response code: {(int)response.StatusCode}");Console.WriteLine($"Response body: {responseBody.Replace("\\u0026", "&")}\n");return responseBody;}catch (Exception ex){Console.WriteLine($"Error occurred: {ex.Message}");throw;}}/// <summary>/// 格式化查询参数/// </summary>private string FormatQueryParameters(Dictionary<string, string> parameters){if (parameters == null || parameters.Count == 0)return "";// 按键名排序并拼接var sortedParams = parameters.OrderBy(p => p.Key);return string.Join("&", sortedParams.Select(p => $"{p.Key}={p.Value}"));}/// <summary>/// 计算SHA256哈希/// </summary>private string ComputeSha256Hash(string input){// 创建SHA256实例using (SHA256 sha256Hash = SHA256.Create()){// 将输入字符串转换为UTF8字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = sha256Hash.ComputeHash(inputBytes);// 将字节数组转换为十六进制字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2")); // "x2"确保每个字节用两位十六进制表示
            }return builder.ToString();}}/// <summary>/// 计算HMAC-SHA256/// </summary>private string ComputeHmacSha256(byte[] key, string input){using (HMACSHA256 hmac = new HMACSHA256(key)){byte[] hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(input));return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();}}/// <summary>/// 获取签名密钥/// </summary>private byte[] GetSignatureKey(string key, string dateStamp, string regionName, string serviceName){byte[] kDate = ComputeHmacSha256Bytes(Encoding.UTF8.GetBytes(key), dateStamp);byte[] kRegion = ComputeHmacSha256Bytes(kDate, regionName);byte[] kService = ComputeHmacSha256Bytes(kRegion, serviceName);return ComputeHmacSha256Bytes(kService, "request");}/// <summary>/// 计算HMAC-SHA256字节数组/// </summary>private byte[] ComputeHmacSha256Bytes(byte[] key, string input){using (HMACSHA256 hmac = new HMACSHA256(key)){return hmac.ComputeHash(Encoding.UTF8.GetBytes(input));}}
}

9. 调用代码

private static async Task Main(string[] args)
{try{// 火山官网密钥信息, 注意sk结尾有==string accessKey = "AKL...jI";string secretKey = "WVR..==";// 创建客户端实例var client = new VolcengineApiClient(accessKey, secretKey);// 准备请求参数var bodyParams = new{req_key = "jimeng_high_aes_general_v21_L",prompt = "stand in forest",return_url = true};// 发送请求string response = await client.SendRequestAsync(action: "CVProcess",version: "2022-08-31",bodyParams: bodyParams);}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");if (ex.InnerException != null){Console.WriteLine($"Inner Exception: {ex.InnerException.Message}");}}
}

10. 调用输出

image

 至此,即梦API调用成功。

相关文章:

豆包生成C#即梦API HTTP调用实例代码

最近玩即梦AI,文生图,文生视频等等很多玩法都很强大。即梦本身页提供了API。官方文档里有Java, Golang, Python, PHP的SDK,官方也推荐使用SDK,调用SDK会比较省事儿。官方也提供了HTTP请求示例代码,但是也只包括Java, Golang, Python, PHP,没有C#。所以就尝试写个C#调用即…...

解析几何笔记

记号约定:\(\displaystyle {x \brack y}\):向量 \((x, y)\)。1. 直线 一些定义:方向向量:与直线 \(l\) 平行的向量。 倾斜角:直线 \(l\) 与 \(y\) 轴正方向同向的方向向量,与 \(x\) 轴正方向的夹角。形式化的,设直线 \(l\) 的方向向量 \(\bold{v}\) 满足 \(\displaystyl…...

基于SOA海鸥优化算法的PID控制器最优控制参数计算matlab仿真

1.课题概述 基于SOA海鸥优化算法的PID控制器最优控制参数计算matlab仿真,通过SOA优化PID的kp,ki,kd三组参数,对比普通的PID控制器的控制效果。 2.系统仿真结果 3.核心程序与模型版本:MATLAB2022a%使用优化后的参数控制PID控制器 for k=1:10000time(k) = k*ts;%设定…...

使用 CUDA 12.9 编译 PyTorch 2.4.0

最近跑的一个项目需要 torch==2.4.0,但是 GPU(NVIDIA RTX PRO 6000)需要 CUDA 12.9,PyTorch 官方这个配置的预编译包,因此需要手动编译。获取源码: git clone -b v2.4.0 --depth 1 https://github.com/pytorch/pytorch cd pytorch git submodule sync git submodule upda…...

详细介绍:boost::circular_buffer的使用方法简介

详细介绍:boost::circular_buffer的使用方法简介pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...

基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真

1.程序功能描述 基于禁忌搜索算法的TSP问题最优路径搜索,旅行商问题(TSP)是一个经典的组合优化问题。其起源可以追溯到 19 世纪初,最初是在物流配送、线路规划等实际场景中被提出。简单来说,给定一组城市和城市之间的距离,旅行商需要从一个城市出发,访问每个城市恰好…...

PDD9.14 笔试 - 浪矢

目录Day1 T1Day1 T4 Day1 T1 简单的模拟: 题目内容大概是给一个字符串a,a的子串拼成字符串b。 例如abcd -> abbccd 给你b字符串,要求给出a字符串。 思路:b字符串中除了第一个字符和最后一个字符串外,其他的都是重复字符,隔一个选一个就好。点击查看代码 import java.u…...

增肌,减脂,变瘦的联系和区别

首先,健身的目的基本都是为了好看的体型,肌肉和脂肪匀称的占比,力量和丝滑的结合。如果是运动员或需要针对性训练肌肉的话,那另说。 其次,这里说一下饮食和训练的关系。 俗话说,三分练七分吃。很多人不理解,为什么吃这么重要,但是我各种营养餐,减脂餐,轻食,没少吃,…...

(eval):1: _python-argcomplete: function definition file not found

(eval):1: _python-argcomplete: function definition file not found 我在使用kali的时候每次想使用table键补全命令就会报错,很烦人就是 去网上搜了一下,终于找到了解决方法argcomplete是一个用于Python的命令行参数自动补全工具。它通过与argparse库结合,为Python应用程序…...

详细介绍:【Spring Boot 报错已解决】Web server failed to start. Port 8080 was already in use.

详细介绍:【Spring Boot 报错已解决】Web server failed to start. Port 8080 was already in use.pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…...

Nordic Neuton.AI 技术优势;

Nordic Neuton.AI 技术的主要优势包括: 极小模型体积 Neuton.AI 能自动生成极小的机器学习模型,通常仅需几 KB(平均小于 5 KB),比传统框架(如 TensorFlow Lite for Microcontrollers)小 10 倍以上。 自动化建模,无需 ML 专业知识 Neuton.AI 平台无需开发者具备神经网络…...

channel Sounding 工作流程

1、必须要建立连接,并且配对绑定模式; 2、通过发送LL_CS_CONFIG_REQ PDU Select “启动器(Initiator) 或 反射器Reflector; 3、LL_CS_CONFIG_RSP PDU Select “与 DEVICE A 相反的角色 ” 4、启动器( Initiator )和反射器都可以发起channel sounding的流程; 如果对这个…...

基于Zhang-Suen算法的图像细化处理FPGA实现,包含testbench和matlab验证程序

1.算法运行效果图预览 (完整程序运行后无水印)将数据导入到matlab中显示图片:可以看到,图3,通过FPGA细化之后,可以获得和MATLAB一样的效果(图2),两者相对于原图(图1)都实现了图像的细化处理。2.算法运行软件版本 vivado2019.2matlab2024b/matlab2022a3.部分核心程序 (…...

channel Sounding RTT和PBR 属性总结

1、蓝牙联盟规定了有72个信道可以使用,每个信道带宽1M; 2、跳频模式和普通ble 跳频方式是不一样的; 3、channel Sounding 必须要是建立连接的; 4、角色分为启动器和反射器; 6、启动器:计算自身到另一个设备的距离 7、反射器:对启动器进行响应的设备; 8、跳频机制和我们普…...

二分查找方法

/*二分查找方法,前提是这个数组是有序的,无序的先排序 1-100; 50 25 判断结构,循环结构(比较),区间为零时找完,则没有找到 / //public static boolean binarySearch(int[]array,int target) //{//定义左右坐标 // int left=0; // int right=array.length-1; /因为…...

复制一个数组的方法

public class DemoArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] array1 = new int[array.length]; // for(int i:array){//特殊方法(遍历数据的时候),只需要输出数据的时候使用 // System.out.println(i); //…...

判断目标是否在数组里面

public static boolean fiandTarget(int[] array,int target){ // boolean flag = false; for (int i = 0; i < array.length; i++) { if (array[i] == target){ return true; //flag = true; } } // return flag; return false; }...

选择排序方法

public static void chooseSort(int[] array){for (int i = 0; i < array.length - 1; i++){//记住索引位置int min = array[i];int minIndex = i;//开始内存比较for (int j = i+1; j < array.length; j++) {// 如果发现比标志的小的,就将赋值给标志位if (array[j] <…...

ArcGIS Pro 遇到严重的应用程序错误而无法启动 - 教程

ArcGIS Pro 遇到严重的应用程序错误而无法启动 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

第一次作业

大家好我日常有三个常做的事:刷视频、玩游戏、偶尔画画。刷视频时,我不只是看娱乐内容,遇到 “Python 基础操作”“PS 简单修图” 这类实用知识,会随手存到收藏夹,每周还会抽 1 小时把零散知识点整理成笔记,现在已经攒了厚厚一本,之前帮同学修图时,还从笔记里找到过调整…...

markdown文件上传到博客园教程

如何将Markdown文件上传到博客园文本内容 图片资源前期准备 vscode软件下载并安装vscode软件安装博客园插件并登录账号在vscode中,通过搜索栏搜索并安装博客园插件,插件名称为:博客园cnblogs客户端,安装后重启vscode软件。登录账号登录成功后可以上传到博客园markdown文件上…...

自我介绍

大家好,我是 谢燚欣 一名来自数据科学与大数据技术专业的学生,很高兴加入博客园以及接下来对我的学习过程进行记录。在学习之外,我还有一颗好奇和勇于尝试的心。当我对滑滑板和滑雪很好奇时,我就会去尝试它们,尽管每一次的摔跤都伴随着剧烈的疼痛,那是也阻挡不了我对它的…...

【展厅多媒体】从技术到体验,AR在展厅中的一体化整合 - 指南

【展厅多媒体】从技术到体验,AR在展厅中的一体化整合 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

LilCTF 2025

Qt_Creator Solve 通过字符串找到槽函数sub_410100()发现判断点为this == v21,直接动调(附加)到这个地方取值就行(跳过下面部分)根据字符串找到注册信号的位置向上翻找到该类的this指针What I have learned此题不止在demo_code_editor.exe执行过程中存在反调试,在加载库时应该也…...

AES算法原理与举例说明

AES算法原理与举例说明AES( Advanced Encryption Standard,高级加密标准 )是当前全球主流的对称分组密码,用于替代安全性不足的 DES,广泛应用于 HTTPS、文件加密、物联网通信等场景。其核心特点是分组长度固定为 128 位,密钥长度支持 128 位、192 位、256 位(对应算法称…...

ffplay音频重采样 - 教程

ffplay音频重采样 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size:…...

devexpress gridcontrol表格知识

过滤 高亮显示 ,不过滤非匹配行行选择,单行编辑 活动行着色 保存...

深入解析:Qt串口通信学习

深入解析:Qt串口通信学习pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

字符串算法笔记

记号约定:\(|s|\):字符串 \(s\) 的长度。 \(\mathbb{S}\):字符串集。 \(\Sigma\):字符集。一些约定:下标从 \(0\) 开始。1. 哈希 1.1 定义 我们想要快速求出字符串 \(s\) 是否等于 \(t\)。 如果 \(|s| \neq |t|\),那么一定不相等,所以令 \(|s| = |t| = n\)。那么有 \(O(…...

【光照】Unity[经验模型]和[物理模型]

Unity URP(Universal Render Pipeline)中的光照模型BRDF(双向反射分布函数)是PBR(基于物理的渲染)的核心组成部分,用于模拟真实世界的光照交互。【从UnityURP开始探索游戏渲染】专栏-直达一、BRDF发展历史(时间线)‌1971年‌:Bouknight提出首个光反射模型,引入Lambe…...

实用指南:浅聊一下Redisson分布式锁

实用指南:浅聊一下Redisson分布式锁pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

JavaScript起源

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门:HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 控制了网页的行为本教程是关于 JavaScript 及介绍 JavaScript 如何与 HTML 和 CSS 一起工作。谁适合阅读本教程? 1. 如果您想学习 J…...

9.14做题随记

OI学习,宁可不学不可逆向,要么知道题目怎么做后学习代码写法,要么知道代码基础学习题目怎么做,要么两种都会学习另外一种解法,万万不可逆向学习,费心费力。P1678 烦恼的高考志愿 题目背景 计算机竞赛小组的神牛 V 神终于结束了高考,然而作为班长的他还不能闲下来,班主任…...

树-学习笔记

定义:一个树是由n个元素组成的有限集合。其中,每个元素叫结点(node) 性质:有一个特殊的结点叫根节点(root node) 从图论的角度,一个树有n-1条边,所以它是无环的。同时,它是连通的,因为可以直接或间接地从一个结点走到另一个结点 除了根结点以外,其余的结点可以分成m(m&…...

centos 安装 postgresql 数据库

* 安装必要的工具yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm* 移除可能冲突的默认 PostgreSQL 模块(如有)yum remove -y postgresql** 查看 postgresql 版本yum list postgresql** 按 y 一直安…...

个人问题反省--致命问题(急需解决)

目前尝试投了几家距离较远的公司,但是沟通均未深入,所以停止盲目投递,跳脱出来反思个人问题。...

STM32 HAL学习笔记:EC11的使用和定时器中编码器模式的中断

本文使用STM32Cube软件包提供的驱动对EC11进行读取,包含部分电路原理图和代码。背景 之前买了一个EC11,想要拿来实现音量调节之类的功能,现在终于有时间研究了。 原理图 一开始R1、R2、R3选择的是100k,测试发现下降沿只有几百纳秒,但上升沿过于平缓,如下图,旋转较快时容…...

题解:P12546 [UOI 2025] Convex Array

目前暂无修正。 % 你赛出了这题,赛后补题参照FFTotoro的题解详细化了一下具体转移过程及思路,在此感谢原作者(怎么套娃了)。 不难得出题意等价于找出两个不同的序列使得相邻两数差单调不降,两个序列的并集为原序列集合(可重集),两个序列的交集为升序排序后的 \(\{a_1\}…...

Java并发编程(1)

基础 1、并行跟并发的区别 并行:同一时刻,多个线程都在执行,这就要求有多个CPU分别执行多个线程。 并发:在同一时刻,只有一个线程执行,但在一个时间段内,两个线程都执行了。其实现依赖于CPU切换线程,因为切换时间很短,所以基本对于用户是无感知的。2、什么是进程和线程…...

玩转 hostnamectl set-hostname:Linux 主机名管理的优雅方式 - 实践

玩转 hostnamectl set-hostname:Linux 主机名管理的优雅方式 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier Ne…...

DES原理与举例说明

DES原理与举例说明一、DES 核心原理:6 大关键步骤 DES 的加密过程可拆解为 “初始置换→密钥扩展→16 轮迭代→逆初始置换” 四大阶段,其中 16 轮迭代是加密的核心,每轮又包含 “扩展置换、异或、S 盒替换、P 盒置换”4 个步骤。整体流程如下: 1. 预处理:明文初始置换(IP…...

Spring八股文 - 实践

Spring八股文 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14p…...

Morpheus 审计报告分享2:ChianLink 数据源有着不同的“心跳”

漏洞信息 漏洞报告https://code4rena.com/audits/2025-08-morpheus/submissions/S-709漏洞代码https://github.com/code-423n4/2025-08-morpheus/blob/a65c254e4c3133c32c05b80bf2bd6ff9eced68e2/contracts/capital-protocol/ChainLinkDataConsumer.sol#L78-L107漏洞背景 Heart…...

「嘶吼」第一章:吃饭睡觉打豆豆

标准的鹅蛋脸圆圆的,瞪着一双大眼,大双眼皮显得格外精神,小肚子微微隆起,头发及腰,常常梳着高马尾。因为从小营养过剩,她个子在幼儿园里偏高,跑得快,力气大,小胳膊小腿扑腾起来可折腾人了,用不完的精力都用在调皮捣蛋上了。小胖妞?这无疑是对李鹤然最好的形容。一岁…...

Clion 基础设置

切换中英文切换老 UI 在 CLion 2024.2 及更高版本中,旧版 UI 已不再作为内置选项,而是通过插件提供。...

《Vuejs设计与实现》第 16 章(解析器) 上 - 教程

《Vuejs设计与实现》第 16 章(解析器) 上 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospac…...

go代码(1)

package main import "fmt" func main() { fmt.Println("hello world") } 运行: $ go run hello-world.go hello world $ go build hello-world.go $ ls hello-world hello-world.go $ ./hello-world hello world本文来自博客园,作者:gosamuel,转载…...

7种常见的入侵检测系统规避技术解析

本文详细解析了攻击者常用的7种入侵检测系统(IDS)规避技术,包括文件恶意软件、混淆技术、IP分片、源路由等,并提供了相应的缓解措施,帮助企业安全团队加强网络防护。7种常见的入侵检测系统规避技术 恶意攻击者使用各种规避策略渗透网络,而入侵检测系统(IDS)却未能察觉。了解…...

js的引用

js代码 JavaScript又称ECMAScript,常用的版本通常有es5以及es6 元素中的代码 a元素除了能定义链接地址,同样可以定义js <a href="javascript:window.alert(hello)">Hello</a>我们可以通过按钮的单击事件实现上面相同的效果,其中事件也就是什么情况下执…...

P3957 [NOIP 2017 普及组] 跳房子

题目描述 给出 \(n\) 个点的坐标 \(a_i\) 和权值 \(s_i\),每次向右移动正距离 \(p\),满足 \(d-x \le p \le d+x\) 且落在给定的点上,求使经过点值的最大和不小于 \(k\) 的最小 \(x\)。 思路 step1-二分答案 这道题我们要求的是最小的 \(x\),可显然我们无法将 \(x\) 设计到状…...