加密解密基础知识Crypto Basics

base64编码

编码不是真正的密码学,但它在围绕加密功能的各种标准中被大量使用。尤其是 Base64 编码。

Base64 编码是一种用于将各种字节转换为特定字节范围的技术。此特定范围是 ASCII 可读字节。 这样,您可以更轻松地传输二进制数据,例如密钥或私钥。您甚至可以将它们打印出来或写下来。 编码也是可逆的。因此,如果您有编码版本,则可以创建原始版本。

在维基百科上,您可以找到更多详细信息。基本上,它会遍历所有字节,并将每组 6 位转换为可读字节(8 位)。结果是编码字节的大小增加了约 33%。

Hello ==> SGVsbG8=
0x4d 0x61 ==> TWE=
基本身份验证
Web 应用程序有时会使用基本身份验证。这使用 base64 编码。因此,至少使用传输层安全性(TLS 或更常见的 https)来保护其他人读取发送到服务器的用户名密码非常重要。

$echo -n “myuser:mypassword” | base64
bXl1c2VyOm15cGFzc3dvcmQ=
HTTP 标头将如下所示:

Authorization: Basic bXl1c2VyOm15cGFzc3dvcmQ=

如果截获了Authorization,就能破解出用户名和密码。

0x02

直接对 eWFuZ3lhbGk6cGFzc3cwcmQ=进行base64解码即可得到结果
在线编码解码:https://www.sojson.com/base64.html

其他编码

URL 编码

在向服务器发送表单数据和请求参数时,会大量使用URL编码。由于 URL 中不允许有空格,因此将其替换为 %20。对其他角色进行了类似的替换。

HTML 编码

HTML 编码可确保文本在浏览器中按原样显示,而不是被浏览器解释为 HTML。

UUEncode

Unix-2-Unix 编码已用于发送电子邮件附件。

XOR 编码

有时,编码被用作存储密码的第一种简单混淆技术。例如,IBM WebSphere Application Server 使用特定的 XOR 编码实现将密码存储在配置文件中。IBM 建议保护对这些文件的访问,并将缺省的 XOR 编码替换为您自己的定制加密。但是,如果不遵循这些建议,这些默认值可能会成为漏洞。

普通散列

哈希是一种密码学,主要用于检测原始数据是否已更改。哈希是从原始数据生成的。它基于不可逆的加密技术。 如果原始数据更改一个字节,则生成的哈希值也会有所不同。

所以在某种程度上,它看起来像是一种安全的技术。但是,在将其用于密码时,它不是,甚至从来都不是一个好的解决方案。这里的问题是,您可以从字典中生成密码,并从这些密码中计算出各种变体。对于每个密码,您可以计算一个哈希值。这些都可以存储在大型数据库中。因此,每当您找到可能是密码的哈希值时,您只需在数据库中查找哈希值并找出密码即可。

不应再使用某些哈希算法:MD5、SHA-1 对于这些哈希值,可以更改有效负载,使其仍会产生相同的哈希值。这需要大量的计算能力,但仍然是一个可行的选择。

加盐哈希

显然,普通密码不应存储在数据库中。普通哈希也是如此。 OWASP密码存储备忘单解释了当需要安全存储密码相关信息时应使用的内容。
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html

0x04

https://www.cmd5.com/
直接使用cmd5网站对两个字符串进行解密即可得到。

对称加密

对称加密基于用于加密和解密的共享密钥。因此,双方(参与交换机密)共享相同的密钥。

示例协议包括:

AES

3DES

非对称加密

非对称加密基于由密钥对组成的数学原理。这两个密钥通常称为私钥和公钥。私钥需要得到很好的保护,并且只有一方知道。所有其他人都可以自由使用公钥。使用私钥加密的东西可以被所有拥有公钥的人解密,而用公钥加密的东西只能用私钥解密。

示例协议包括:

RSA

DSA

HTTPS 同时使用对称密钥和非对称密钥

以下是打开浏览器并转到 https 站点时会发生什么的简短描述。

您的浏览器连接到服务器并获取 Web 服务器证书

浏览器通过检查证书颁发者证书是否在其信任存储中来检查它是否信任证书颁发者。此信任存储由操作系统和浏览器更新管理。在某些公司网络上,它由公司管理。浏览器从证书中获取公钥。

浏览器现在生成随机字节,用于生成对称密钥,并使用服务器的公钥对其进行加密。所以只有服务器才能解密它。

在此过程结束时,浏览器和 Web 服务器都将使用交换的对称密钥(在非对称密钥交换过程中)来加密和解密在浏览器和 Web 服务器之间来回发送的消息。

之所以使用对称密钥,是因为它可以更轻松地用于大型数据集,并且这样做需要较少的处理能力

签名

签名是一种哈希值,可用于检查某些数据的有效性。签名可以与其验证的数据分开提供,或者在CMS或SOAP的情况下可以包含在同一个文件中。(其中该文件的部分包含数据,部分包含签名)。

当完整性很重要时,使用签名。它旨在保证从甲方发送到乙方的数据不会被更改。因此,甲方通过计算数据的哈希值并使用非对称私钥加密该哈希值来对数据进行签名。然后,乙方可以通过计算数据的哈希值并解密签名来验证数据,以比较两个哈希值是否相同。

RAW签名

甲方通常按如下方式计算原始签名:

创建数据的哈希值(例如 SHA-256 哈希值)

使用非对称私钥(例如 RSA 2048 位密钥)加密哈希值

(可选)使用 base64 编码对二进制加密哈希进行编码

乙方也必须获得带有公钥的证书。这之前可能已经交换过了。因此,至少涉及 3 个文件:数据、签名和证书。

CMS 签名

CMS 签名是一种标准化方式,用于将数据 + 签名 + 证书(公钥全部在一个文件中)从甲方发送到乙方。只要证书有效且未被吊销,乙方就可以使用提供的公钥来验证签名。

SOAP 签名

SOAP 签名还包含数据和签名以及(可选)证书。多合一 XML 有效负载。计算数据的哈希值涉及一些特殊步骤。这与从系统发送到系统的 SOAP XML 可能会引入额外的元素或时间戳有关。 此外,SOAP签名提供了由不同方对消息的不同部分进行签名的可能性。

电子邮件签名

发送电子邮件不是很困难。您必须填写一些数据并将其发送到转发它的服务器,最终它将到达目的地。但是,可以使用不是您自己的电子邮件地址的 FROM 字段发送电子邮件。为了向您的收件人保证您确实发送了这封电子邮件,您可以在您的电子邮件上签名。受信任的第三方将检查您的身份并颁发电子邮件签名证书。在电子邮件应用程序中安装私钥,并将其配置为对发送的电子邮件进行签名。该证书是在特定电子邮件地址上颁发的,收到此电子邮件的所有其他用户都将看到发件人已通过验证的指示,因为他们的工具将使用受信任的第三方颁发的公共证书来验证签名。

PDF 或 Word 或其他签名

Adobe PDF 文档和 Microsoft Word 文档也是支持签名的示例。签名也与数据位于同一文档中,因此对数据的一部分和元数据的一部分有一些描述。 政府通常会发送带有包含证书的 PDF 的官方文件。

0x06

将给的私钥保存为test.ky上传linux
通过私钥生成公钥文件:
执行 openssl rsa -in test.key -pubout>test.pub 生成一个test.pub文件
提取公钥中的modulus信息:
执行 openssl rsa -in test.pub -pubin -modulus -noout 输出module
使用私钥对该modulus信息进行签名计算,并将结果进行base64编码,得到一个私钥签名的签名值的base64编码结果:
执行 echo -n “CCE0C84A178CE94395E7D63FB1D87DA56D94805E054A118B9AE206A7EEAB7E2B43B9AF80D16B68784733F9414D96DC69D5C8B481A994814B59CBF60B32845B2F65CB924CE45018D458AB0E1F46A9A716C00863057E9F60A893489240A711B42DFBDA9E95EBE80D8E2E2DA4B58B5694F0A36A059E4693F835B77F025488436095F0531B39B8EE06A16747E49AFBB959F035B4FA44F935D5DCC362425531575F7525E58A75B74DF84BB51BC574ECFA8FE9ACE36353A862195F5F5F0255E0C94E9EAC23ECC41BDC756F30B5FB5D426F9276EE6505D35971BBF6D94C21C7B4B71EF6FA5806B57B85FA140D15CB0F1CEA8BE561A33062B17B12455498D566DE245D2F” |openssl dgst -sign test.key -sha256 |base64
输出签名XzYrcngmdmtPtKDrkWfNO8gvNvhYbNI0gNYkmO+Uuas/89H5tNiciJSJGuJMf1hiix4bHsC8h8Jp
dO1nrT/yFeuootNxNS0Jg3mLpeUcQvMVDzFfQgzmqtJpHGB8OTkqFjU6XTemZEiwzvcy9ay1Orsp
lhLteSfOBbpTJ4BNfri2y9f5pAun5LD0Tyv4DRi4C9tZP9QTTq8ifo867ereVsTXUOQGBcXL/F7l
cpV0xwg8y8VE5iT1WZtaeelp8ZUU0LLIIla+Q1JG3qEkb4OQT2rzzN+8LwVyXg7Dv9qobeyv95uv
E+UrlMgE488ezdlnnknlf0fJBf9PKnjX1VFDQw==
然后将module和签名输入提交
在这里插入图片描述
通常情况下,签名的算法可能是公开的,但是签名用的秘钥是私密的,如果签名用的共享秘钥、私钥等信息泄露,就会导致签名值被破解,从而伪造合法的签名进行接口调用。

秘钥是我们在应用系统开发中经常会用到的东西,比如数据库的连接密码、签名用的秘钥、https对应的私钥等等。

那么如果这些秘钥在保存时,没有做足够的安全措施,那么就容易造成安全风险,一般来说,我们不建议将密码明文硬编码在代码或者系统的配置文件中,一旦主机被控制,攻击者可以通过翻阅配置文件等获取到这些密码,从而进一步访问数据库等更多的系统。

比较安全的做法是,讲代码和秘钥进行隔离,秘钥统一保存在加密机等系统中,
参考:https://zhuanlan.zhihu.com/p/652570763

0x08

需要新的docker容器,进入容器,找到root文件夹下的文件,查看内容。

[root@localhost]# docker exec -it  --user root 853af53eeba9 /bin/bash
root@853af53eeba9:/# cd root
root@853af53eeba9:~# ls
default_secret
root@853af53eeba9:~# cat default_secret
ThisIsMySecretPassw0rdF0rY0u

把密码复制出来,放到secret.key这个文件

echo "ThisIsMySecretPassw0rdF0rY0u" >> secret.key

使用题目给的openssl命令结合这个secret.key文件进行解密
执行的openssl命令需要在docker内执行,否则报错。
在这里插入图片描述
可以得到解密后的明文字符串是“Leaving passwords in docker images is not so secure”
未加密的消息就是 Leaving passwords in docker images is not so secure
存储密码的文件是 default_secret

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

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

相关文章

【Nginx38】Nginx学习:SSL模块(二)错误状态码、变量及宝塔配置分析

Nginx学习:SSL模块(二)错误状态码、变量及宝塔配置分析 继续我们的 SSL 模块的学习。上回其实我们已经搭建起了一个 HTTPS 服务器了,只用了三个配置,其中一个是 listen 的参数,另外两个是指定密钥文件的地址…

python-在系统托盘显示CPU使用率和内存使用率

一、添加轮子 1.添加托盘区图标库 infi.systray from infi.systray import SysTrayIcon 2.添加图像处理库 Pillow from PIL import Image, ImageDraw, ImageFont 3.添加 psutil 来获取CPU、内存信息 import psutil 二、完整代码 from infi.systray import SysTrayIcon …

一个很不错的开源图像库 Graphics32

Graphics32 是一个很不错的开源图像库。通过调试和跟踪Graphics32 的代码,可以快速的熟悉图像处理的一些知识。例外Graphics32有着很不错的性能。在不使用DirectX的情况下能达到一个惊人的速度,可以作为一个简单的2D引擎来使用,就功能上讲比那…

如何使用Selenium处理Cookie,今天彻底学会了

01 cookie介绍 HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求…

MyBatis实现多表映射、分页显示、逆向工程

目录 一、MyBatis实现多表映射 1.1 实体类设计 1.2 一对一关系实现案例 1.3 对多配置实现案例 1.4 设置自动映射与n张表关联映射 二、MyBatis实现分页功能 2.1 mybatis插件工作原理 2.2 引入插件与插件的使用 三、逆向工程插件 3.1 什么是逆向工程 3.2 MyBat…

web前端——HTML+CSS实现奥运五环

web前端——HTMLCSS实现奥运五环 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

“我“何去何从?2024年软件测试职业发展方向?运筹帷幄方能决胜千里之外...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试的职责无非就…

C++中的多态

C中的多态 一、概念二、虚函数1、概念2、重写&#xff08;覆盖&#xff09;3、重载、覆盖&#xff08;重写&#xff09;、隐藏&#xff08;重定义&#xff09;的对比&#xff08;1&#xff09;重载&#xff08;2&#xff09;重写&#xff08;覆盖&#xff09;&#xff08;3&…

【C++】set和multiset

文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元…

SpringBoot 将 jar 包和 lib 依赖分离,dockerfile 构建镜像

前言 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它提供了很多便利的功能&#xff0c;例如自动配置、快速开发等等。 在使用 Spring Boot 进行开发时&#xff0c;我们通常会使用 Maven 或 Gradle 进行项目构建。 本文将为您介绍如何使用 Maven 将 Spring Boot …

OSError: libomp.so: cannot open shared object file: No such file or directory

报错&#xff1a;OSError: libomp.so: cannot open shared object file: No such file or directory https://stackoverflow.com/questions/52401840/what-is-the-ctypes-cdll-default-path 没有libomp.so 总算找到啦&#xff01;链接 export LD_LIBRARY_PATH/usr/lib/llvm…

LangChain+LLM实战---实用Prompt工程讲解

原文&#xff1a;Practical Prompt Engineering 注&#xff1a;本文中&#xff0c;提示和prompt几乎是等效的。 这是一篇非常全面介绍Prompt的文章&#xff0c;包括prompt作用于大模型的一些内在机制&#xff0c;和prompt可以如何对大模型进行“微调”。讲清楚了我们常常听到的…