【涨薪技术】掌握加密签名接口测试实战!

接口加密是指在网络传输过程中,将数据进行加密,以保护数据的安全性。接口加密可以采用多种加密算法,如AES、DES、RSA等。测试接口加密的目的是验证接口加密算法的正确性和安全性。

1加密与加密算法

加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。也就是说加密算法是可逆的,而且其加密后生成的密文长度和明文本身的长度有关。所以如果被保护数据在以后需要被还原成明文,则需要使用加密。

在加密算法中又分为对称加密(symmetric encryption)和非对称加密(asymmetric encryption)

2对称加密

对称加密采用了对称密码编码技术,它的特点是加密和解密都是用同一个密钥,这种方法在密码学中叫做对称加密算法.

对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高.

常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES

注意: 因为前端的透明性,对于登录密码等敏感信息,就不要使用JavaScript来进行对称加密. 因为别人可以从前端得到密匙后,可以直接对信息进行解密!

(1)甲方选择某一种加密规则,对信息进行加密;
(2)乙方使用同一种规则,对信息进行解密。
由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算
法"(Symmetric-key algorithm)。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无
法解密。保存和传递密钥,就成了最头疼的问题。

3非对称加密

非对称加密算法需要两个密钥:

公钥(publickey)和私钥(privatekey)

公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成对密钥并将其中的一把作为公钥向其它方公开;得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公钥加密后的任何信息。

常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人
都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin
Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完
成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发
了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这
两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为"非对称加密算法"。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

4单向散列

哈希加密:

哈希(Hash)是将目标文本转换成具有固定长度的字符串(或叫做消息摘要)。当输入发生改变时,产生的哈希值也是完全不同的。从数学角度上讲,一个哈希算法是一个多对一的映射关系,对于目标文本 T,算法 H 可以将其唯一映射为 R,并且对于所有的 T,R 具有相同的长度,所以 H 不存在逆映射,也就是说哈希算法是不可逆的。

基于哈希算法的特性,其适用于该场景:被保护数据仅仅用作比较验证且不需要还原成明文形式。比较常用的哈希算法是 MD5 和 SHA1。我们比较熟悉的使用哈希存储数据的例子是:当我们登录某个已注册网站时,在忘记密码的情况下需要重置密码,此时网站会给你发一个随机的密码或者一个邮箱激活链接,而不是将之前的密码发给你,这就是因为哈希算法是不可逆的。

需要注意的是:在 Web 应用中,在浏览器中使用哈希加密的同时也要在服务端上进行哈希加密。

服务端哈希加密原因:一方面因为不需要将密文解密成明文来比对密码,另一方面是一旦加密算法和密钥泄露,那么整个用户资料库就相当于明文存储了。如果前端传过来的是明文,那么在注册时将其哈希,存入数据库。登录时,将密码哈希和数据库对应的数据比对,若一致则说明密码正确。

现在,对于简单的哈希算法的攻击方法主要有:寻找碰撞法和穷举法。所以,为了保证数据的安全,可以在哈希算法的基础上进一步的加密,常见的方法有:加盐、慢哈希、密钥哈希、XOR 等。

5数字签名

数字签名主要用于:确认信息来源于特定的主体且信息完整、未被篡改,发送方生成签名,接收方验证签名。

发送方: 首先计算目标文本的摘要(哈希值),通过私钥对摘要进行签名,将目标文本和电子签名发送给接收方。

接收方: 验证签名的步骤如下:

1. 通过公钥破解电子签名,得到摘要 D1 (如果失败,则信息来源主体校验失败);

2. 计算目标文本摘要 D2;

3. 若 D1 === D2,则说明目标文本完整、未被篡改。

数字签名与非对称加密区别:

非对称加密(加密/解密):公钥加密,私钥解密

数字签名(签名/验证):私钥签名,公钥验证

加密签名接口实战

01使用digest函数进行散列

摘要函数在特定的哈希算法中返回加密的值,并带有可选的salt,大写字母和变量名。

02使用commons-codec进行加密处理

什么是commons-codec

Apache Commons Codec软件包包含用于各种格式(例如Base64和
都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin
Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完
成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发
了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这
两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为"非对称加密算法"。

使用commons-codec进行加密

1)URL编码

System.out.println(URLEncoder.encode("原文", "UTF-
8"));

2)MD5

MessageDigest md = MessageDigest.getInstance("MD5");
// JDK提供的MD5方法
byte[] md5Bytes = md.digest("原文".getBytes()); //
加密字节序列 得到 128个比特的摘要,即16字节
System.out.println(Hex.encodeHex(md5Bytes)); // 每4
个比特转成一位16进制数
System.out.println( DigestUtils.md5Hex("原文")); //
Apache common codec 提供的MD5方法,最终调用的还是JDK

3)SHA

//SHA-1(160比特)、SHA2(SHA-256、SHA-384、SHA-512)
MessageDigest md = MessageDigest.getInstance("SHA-
256"); // JDK提供的SHA方法
byte[] md5Bytes = md.digest("原文".getBytes());
System.out.println(Hex.encodeHex(md5Bytes));
System.out.println( DigestUtils.sha256Hex("原文"));
// Apache common codec 提供的SHA方法,最终调用的还是JDK

4)Base64

BASE64Encoder encoder = new BASE64Encoder(); // JDK
提供
String enStr = encoder.encode("原文".getBytes());
// 编码
enStr = base64Img.replaceAll("[\\s*\t\n\r]", "");
// 去掉可能有的换行符
System.out.println(enStr);
BASE64Decoder decoder = new BASE64Decoder();
System.out.println(new
String(decoder.decodeBuffer(enStr))); // 解码
byte[] result = Base64.encodeBase64("原
文".getBytes()); // Apache common codec提供
System.out.println(new
String(Base64.decodeBase64(result))); // 解码

5)AES

// 生成key
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128); // 确定密钥长度
byte[] keyBytes = kg.generateKey().getEncoded();
// 格式化key
Key key = new SecretKeySpec(keyBytes, "AES");
Cipher cipher =
Cipher.getInstance("AES/ECB/PKCS5Padding"); // 确定算
法
cipher.init(Cipher.ENCRYPT_MODE, key); // 确定密钥
byte[] result = cipher.doFinal("原文".getBytes());
// 加密
System.out.println(Base64.encodeBase64String(result)
); // 不进行Base64编码的话,那么这个字节数组对应的字符串就
是乱码
cipher.init(Cipher.DECRYPT_MODE, key); // 进入解密模式
System.out.println(new
String(cipher.doFinal(result))); // 解密

6)RSA

// 生成密钥对
KeyPairGenerator keyPairGenerator =
KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair =
keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey =
(RSAPublicKey)keyPair.getPublic();
RSAPrivateKey rsaPrivateKey =
(RSAPrivateKey)keyPair.getPrivate();
// 格式化私钥
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new
PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory =
KeyFactory.getInstance("RSA");
PrivateKey privateKey =
keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA"); // 确定算
法
cipher.init(Cipher.ENCRYPT_MODE, privateKey); // 确
定加密密钥
byte[] result = cipher.doFinal("原文".getBytes());
// 加密
System.out.println(Base64.encodeBase64String(result)
);
// 格式化公钥
X509EncodedKeySpec x509EncodedKeySpec = new
X509EncodedKeySpec(rsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey =
keyFactory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA"); // 确定算法
cipher.init(Cipher.DECRYPT_MODE, publicKey); // 确
定公钥
System.out.println(new
String(cipher.doFinal(result))); // 解密

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

平衡,才是世界生生不息的真谛

凤凰涅槃,浴火重生。这句话是很有哲理的,可以运用到命运中。而对于命运,以中为最好,即是平衡。然而,每一个人,都是要经历命运的锤炼,无论怎样锤炼,都要保持一颗善良的心,…

day06-进程线程通信

1. 尝试处理普通信号 #include "test.h"#define MAXSIZE 128void handler(int signo) {if (SIGINT signo){printf("用户按下了 ctrl c 键\n");} }int main(int argc, char const *argv[]) {if (signal(SIGINT, SIG_IGN) SIG_ERR){perror("signal …

2024.02.23作业

1. 尝试处理普通信号 #include "test.h"#define MAXSIZE 128void handler(int signo) {if (SIGINT signo){printf("用户按下了 ctrl c 键\n");} }int main(int argc, char const *argv[]) {if (signal(SIGINT, SIG_IGN) SIG_ERR){perror("signal …

记录 | docker内执行apt update报错GPG error

1. 执行 sudo apt-get update 命令时遇到这个错误,是服务器没有这个公钥的意思 rootadmin:~# sudo apt-get update Get:1 https://download.docker.com/linux/ubuntu focal InRelease [36.2 kB] Err:1 https://download.docker.com/linux/ubuntu focal InRelease T…

Kaggle Intermediate ML Part Three——Pipeline

Step 1: Define Preprocessing Steps Understanding the Data: Data source: Where is the data coming from? What format is it in (e.g., CSV, JSON)? What does it represent?Data characteristics: What variables are present? What are their types (numerical, c…

【C++刷题】优选算法——双指针

移动零 void moveZeroes(vector<int>& nums) {size_t front 0;size_t back 0;while(back < nums.size() && nums[back] ! 0){back;}front back;while(back < nums.size()){if(0 nums[back]){back;}else{swap(nums[front], nums[back]); }} }…

Sora Text to Video 转换过程和技术要素的技术原理详细描述

转换过程&#xff1a; 初始化阶段&#xff1a;Sora 的转换过程从一个随机噪声图像开始。这个噪声图像是通过随机数生成器产生的&#xff0c;它代表了视频数据的初始状态&#xff0c;其中包含了大量的随机性和不确定性。 神经网络处理&#xff1a;这个噪声图像随后被送入一个预…

python 3.11中安装sympy(符号工具包)

1.python环境&#xff1a; 2.安装遇到问题&#xff1a; … 3.升级pip cmd命令行中&#xff0c;执行如下命令&#xff1a; python.exe -m pip installl --upgrade pip 4.再次安装sympy cmd命令行中&#xff0c;执行如下命令&#xff1a; pip install sympy 5.简单应用 对…

【坑】SpringBoot项目打包后的jar包非常小,只有4KB

一、SpringBoot项目打包后的jar包非常小&#xff0c;只有4KB? 1.1、解决方法 pom.xml中添加如下配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>&l…

排列组合简单详解(附10题)(会员版)

非会员,不用注册会员也能看! https://blog.csdn.net/Runcode8/article/details/136274861https://blog.csdn.net/Runcode8/article/details/136274861 一、认识C,P,A: A.排列 A(x,y)=(x!)/[(x-y)!]=x(x-1)...(x-y+1) P.排列 P(x,y)=A(x,y) C.组合 C(x,…

Flink 1.11.0 版本介绍

Flink 1.11.0 发布于 2020 年,引入下面的新特性: 为了缓解 backpressure 下的 checkpointing 性能问题引入 unaligned checkpoints统一 Watermark Generator接口引入 Data Source API为 kubernates 引入新的部署模式:application modeUnaligned Checkpoints 触发一次 check…

针对无法确定连接参数的网口通讯PLC采集方案

年前碰到了一个需求&#xff0c; 需要针对倍福PLC进行数据采集&#xff0c; 搞定了PLC通讯协议后&#xff0c; 最大的问题出现了&#xff0c; 我们不知道PLC的密码&#xff0c; 没办法进入到PLC查询到点位&#xff0c; 而且也没办法对PLC设置路由&#xff0c; 导致没有办法连上…

构建生物医学知识图谱from zero to hero (2):文献抽取

我们选取一篇文献,将文献PDF转换成图片,然后采用pytesseract 实现图片文字识别。 import requests import pdf2image import pytesseractpdf = requests.get(https://arxiv.org/pdf/2110.03526.pdf) doc = pdf2image.convert_from_bytes(pdf.content)# Get the article text…

Linux笔记之LD_LIBRARY_PATH详解

Linux笔记之LD_LIBRARY_PATH详解 code review! 文章目录 Linux笔记之LD_LIBRARY_PATH详解1.常见使用命令来设置动态链接库路径2.LD_LIBRARY_PATH详解设置 LD_LIBRARY_PATH举例注意事项 3.替代方案使用标准路径编译时指定链接路径优先使用 rpath 还是 runpath&#xff1f;注意…

LeetCode 每日一题 2024/2/19-2024/2/25

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/19 590. N 叉树的后序遍历2/20 105. 从前序与中序遍历序列构造二叉树2/21 106. 从中序与后序遍历序列构造二叉树2/22 889. 根据前序和后序遍历构造二叉树2/23 2583. 二叉…

Spring Cloud学习

1、什么是SpringCloud Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。Spring cloud 流应用程…

2024.2.25

P1135 #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N 10010; int n, A, B; int evlt[N]; int res 1e9; bool st[N]; //存每层楼走没走过 //当前在x楼, 当前按了cnt次按钮 void dfs(int x, int cnt) …

瑞_23种设计模式_外观模式

文章目录 1 外观模式&#xff08;Facade Pattern&#xff09;1.1 介绍1.2 概述1.3 外观模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 jdk源码解析 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《23种设计模式》的外观模式篇。本文中的部分…

【Vuforia+Unity】AR02-长方体物体识别(Multi Targets)

1.创建模型 选择多维长方体图,这个长方体是生活中的真实物体的拍摄图,提前把6个面拍摄好并裁剪干净。 官网创建模型https://developer.vuforia.com/targetmanager/project/targets?projectId=0ddbb5c17e7f4bf090834650bbea4995&av=false 设置长宽高,这个长宽高需要…

学算法要读《算法导论》吗?

大家好&#xff0c;我是 方圆。这篇文章是我学习算法的心得&#xff0c;希望它能够给一些将要学习算法且准备要读大部头算法书籍的朋友一些参考&#xff0c;节省一些时间&#xff0c;也为了给经典的“黑皮书”祛魅&#xff0c;我觉得这些书籍在大部分互联网从业者心中已经不再是…