c++对接CAT1400

news2024/12/25 1:18:49

最近工作中遇到需要对接1400协议,网上搜索不到c/c++的实现,所以记录一下自己的实现。

第一步注册:

1400是在http摘要认证的基础上做的,所以要去了解http摘要认证的流程

说明:

1.视图库通过用户分配,手动分配username,password给三方对接程序

2.三方对接程序第一次请求由于不知道Authorization请求头填写信息,所以视图库接收到未带Authorization请

求头信息的请求时会相应401,并附带请求头WWW-Authenticate请求头信息

3.三方根据视图库响应的WWW-Authenticate信息进行RFC2617 digest(下文)加密生成秘钥放入请求头Authorization中,重新发送请求

4.视图库解析Authorization请求头中的秘钥,将解析出的用户名和密码进行匹配,匹配成功,则注册成功,否

则注册失败

参数说明:

username是要认证的用户名

WWW-Authenticate是httpd的一个标头

realm的值是一个简单的字符串

qop是认证的(校验)方式,这个比较重要,对后面md5的加密过程有影响,值就按照上面的那样写就行了

nonce的值也是一个字符串,如果不严格,可以随机生成一个就行,注意它是个GUID,即唯一的、不重复的。如果严格,则需要包含时间信息、客户端IP信息和其它信息,因为认证过程的时间很短,所以如果服务器收到认证信息后发现这个时间和服务器的时间相去甚远,那说明不正常,直接拒绝,以防止攻击,还有客户端IP,如果这个IP一直这样攻击,则可以在一定时间内发现是该IP的连接则直接断掉。这些严格的做法主要是为了防止攻击。在rfc2617上有狭路为详细的描述。我这里没有考虑这些,只是使用了个简单的字符串

url是本次请求的资源位置,比如“/public/userinfo.htm”

cnonce是客户端产生的一个GUID,一般是32字节,而且是16个字节字符串的16进制形式表示,所以其中的内容是0~9和a~f之间的那些字符。其实nonce也是一样,但我没有特意这样做,比如我直接生成一个数字,然后以16进制输出,而没有特殊追求16个字节。

nc是认证的次数,因为如果认证失败,则仍然可以重新发送认证信息继续认证,第一次是1,第二次是2,第三次是3,...。但我这里没有这样弄,只允许一次,如果认证不过就关闭了连接,所以我只处理了1的情况,即00000001,这个值总是固定的8个字节,而且不加引号,和其它域的格式不一样

response的值就很重要了,是根据以上信息,再加上密码通过一定的顺序计算出的一个md5码,固定为16字节的16进制表示形式。服务器在收到所有这些信息后,也通过相同的方式计算出这个值,而密码则是保存在服务器端,即服务器要通过用户名去找到对应的密码,然后和计算出md5值,再和客户端传过来的response值对比,如果一样,则认证通过,否则通不过。

RFC2617 digest加密

MD5((MD5)HA1:HD:(MD5)HA2)

如果algorithm的值是“md5-sess”,则

HA1=username:realm:password:nonce:cnonce

否则

HA1=username:realm:password

HD=nonce:noncecount:cnonce:qop

HA2=method:uri

method是指“GET”/"POST",即http头中指定的获取资源的方式

以下是c/c++代码

#ifndef __CAT1400_H
#define __CAT1400_H
#include "CCurlManager.h"
#include "CTgSSL.h"
#define CAT1400IP "*******"
#define CAT1400PORT ****
#define CATDE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术硬实力:成为项目经理的必备要素

要成为一位合格的项目经理,仅仅通过学习是不够的,还需要通过实践来积累经验。时间永远是增长经验最好的方法。 对于项目经理的角色,普遍有两种看法: 一种是技术型: 这种观点强调项目经理必须具备过硬的技术能力&am…

Leetcode—2609.最长平衡子字符串【简单】

2023每日刷题&#xff08;二十三&#xff09; Leetcode—2609.最长平衡子字符串 实现代码 class Solution { public:int findTheLongestBalancedSubstring(string s) {int zeros 0;int ones 0;int ans 0;int n s.size();for(int i 0; i < n; i) {int t s[i] - 0;if(…

Python - 面向现实世界的人脸复原 GFP-GAN 简介与使用

目录 一.引言 二.GFP-GAN 简介 1.GFP-GAN 数据 2.GFP-GAN 架构 3.GFP-GAN In Wave2Lip 三.GFPGAN 实践 1.环境搭建 2.模型下载 3.代码测试 4.测试效果 四.总结 一.引言 近期 wav2lip 大火&#xff0c;其通过语音驱动唇部动作并对视频质量进行修复&#xff0c;其中…

dd爱科学1.0(最长不下降子序列)

解析&#xff1a; 要求序列非递减&#xff0c;只需求出最长不上升子序列即可&#xff0c;其余位置则需要修改。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e65; int n,dp[N]; void solve(){string s;cin>>n>>s;int cn…

Kubernetes 亲和性 反亲和性 污点 容忍及维护驱逐

亲和性 官方网站&#xff1a; https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/&#xff08;1&#xff09;节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution&#xff1a;软策略 ●requiredDuringSchedulin…

如何在后台执行 SwiftData 操作

文章目录 前言Core Data 私有队列上下文SwiftData 并发支持使用 ModelActor合并上下文更改的问题通过标识符访问模型总结 前言 SwiftData 是一个用于处理数据操作的框架&#xff0c;特别是在 Swift 语言中进行并发操作。本文介绍了如何在后台执行 SwiftData 操作以及与 Core D…

九州未来入选2023边缘计算TOP100,边缘计算能力再获认可

近日&#xff0c;德本咨询、互联网周刊、中国社会科学院信息化研究中心联合发布 “2023边缘计算TOP100”榜单&#xff0c;九州未来凭借领先的技术优势、产品服务能力、落地实践经验等综合实力入选。 数字时代&#xff0c;算力成为第一生产力。边缘计算凭借其低时延、节省带宽、…

FL Studio2024破解版激活码序列号

对于唱作人来说&#xff0c;一款优秀、全能的音乐制作软件&#xff0c;能帮助他们在创作上获得更多的灵感、以及为歌曲带来更多的变化。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家内容。更新后&#xff0c;现在还可以使用…

软约束与硬约束

软约束硬约束 软约束硬约束 硬约束优化 1.基于走廊的光滑轨迹生成 2.基于贝塞尔曲线的轨迹优化 软约束优化 1.基于距离的轨迹优化 2.目标函数的设计 目标函数 光滑代价函数 碰撞代价函数 动力学代价函数。 光滑代价函数&#xff1a; 使用minimum snap来实现。 碰撞…

代码随想录第四十五天 | 动态规划 完全背包的应用:爬楼梯改编;求最小个数,循环顺序无影响(322 零钱兑换,279 完全平方数)

1、爬楼梯改编 之前讲这道题目的时候&#xff0c;因为还没有讲背包问题&#xff0c;所以就只是讲了一下爬楼梯最直接的动规方法&#xff08;斐波那契&#xff09; 改为&#xff1a;一步一个台阶&#xff0c;两个台阶&#xff0c;三个台阶&#xff0c;…&#xff0c;直到 m个台…

nanodet训练自己的数据集、NCNN部署到Android

nanodet训练自己的数据集、NCNN部署到Android 一、介绍二、训练自己的数据集1. 运行环境2. 数据集3. 配置文件4. 训练5. 训练可视化6. 测试 三、部署到android1. 使用官方权重文件部署1.1 下载权重文件1.2 使用Android Studio部署apk 2. 部署自己的模型【暂时存在问题】2.1 生成…

MCUXpresso GBK 汉字编码 lcd显示用

在上面添加 -fexec-charsetGBK &#xff0c;之后IDE就可以解码&#xff08;GBK&#xff09;汉字了

高防CDN与高防服务器:谁更胜一筹?

在当今数字化世界中&#xff0c;网络安全对于保护网站和应用程序至关重要。在这一背景下&#xff0c;高防CDN和高防服务器是两种流行的解决方案&#xff0c;用于应对不同类型的网络攻击。本文将分析高防CDN是否能够替代高防服务器&#xff0c;以及它们各自的优势和限制。 高防C…

数据库 高阶语句

目录 数据库 高阶语句 使用select 语句&#xff0c;用order by来对进行排序 区间判断查询和去重查询 如何对结果进行分组查询group by语句 limit 限制输出的结果记录&#xff0c;查看表中的指定行 通配符 设置别名&#xff1a;alias 简写就是 as 使用select 语句&#x…

用C++编写动画+音频版极乐净土

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<graphics.h> #include<Windows.h> #include<MMSystem.h>//播放音乐所需要的头文件 #pragma comment(lib,"winmm.lib")//告诉编译器&#xff0c;加载winmm.lib库文件 #define C…

文件包含漏洞培训

CTF介绍 MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。CRYPTO(Cryptography)类型,即密码学,题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。PWN类型,PWN在黑客俚语中代表着攻破、取得权限…

项目管理之如何召开项目时间箱启动会议

时间箱启动会议是项目管理中至关重要的一环&#xff0c;它帮助项目团队明确目标、分配任务、制定计划&#xff0c;并为项目的顺利实施提供指导和支持。下边为大家介绍有关如何召开时间箱启动会议的一些建议&#xff1a; 确定会议目标 在召开时间箱启动会议前&#xff0c;首先…

分布式任务调度(02)--ElasticJob-Lite

1 简介 轻量级无中心化解决方案&#xff0c;jar包提供分布式任务的协调服务。 // 应用内部定义任务类&#xff0c;实现SimpleJob接口 public class MyElasticJob implements SimpleJob {// 编写自己任务的实际业务流程Overridepublic void execute(ShardingContext context) {…

Alert警告提示(antd-design组件库)简单使用

1.Alert警告提示 警告提示&#xff0c;展现需要关注的信息。 2.何时使用 当某个页面需要向用户显示警告的信息时。 非浮层的静态展现形式&#xff0c;始终展现&#xff0c;不会自动消失&#xff0c;用户可以点击关闭。 组件代码来自&#xff1a; 警告提示 Alert - Ant Design 3…

VM虚拟机逆向---羊城杯2023 vm_wo复现【详解】

文章目录 前言题目分析还原汇编exp后言 前言 兜兜转转终于回到这里了。之前复现了羊城杯较简单点的三题&#xff0c;到这一题vm卡住了&#xff0c;刷了好几道&#xff0c;终于搞定了。 题目分析 第一次遇到Mac os的题目&#xff0c;幸好还可以做。 opcode 和 指令操作 密文…