加密解密基础知识Crypto Basics

news2024/11/25 11:56:34

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.coloradmin.cn/o/1173737.html

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

相关文章

QML 仪表盘小示例

本次项目已发布在CSDN->GitCode,下载方便,安全,可在我主页进行下载即可,后面的项目和素材都会发布这个平台。 个人主页:https://gitcode.com/user/m0_45463480怎么下载:在项目中点击克隆,windows:zip linux:tar.gz tar # .pro TEMPLATE = appTARGET = dialcontrol​#…

【Unity】2D角色跳跃控制器

最近加了学校的Nova独游社,本文是社团出的二面题,后续有时间优化下可能会做成一个二维冒险小游戏。本文主要涉及相关代码,参考教程:《勇士传说》横版动作类游戏开发教程 效果演示 【Unity】2D角色跳跃模拟器 主要实现功能&#xf…

【从0到1设计一个网关】重试与限流的实现

文章目录 重试限流上文已经讲到了如何设计一个高可用的稳定的网关,那么这里就实现其中两种比较常用的方法。 重试 这里的重试,我将会在IO异常以及请求超时的时候进行一个请求重试。 首先,我们在路由过滤器中添加一个重试的函数,用于在请求出现如上两个异常的时候进行重试。…

帧间快速算法论文阅读

Low complexity inter coding scheme for Versatile Video Coding (VVC) 通过分析相邻CU的编码区域,预测当前CU的编码区域,以终止不必要的分割模式。 𝐶𝑈1、𝐶𝑈2、𝐶𝑈3、&#x…

论文阅读—— CEASC(cvpr2023)

arxiv:https://arxiv.org/abs/2303.14488 github:https://github.com/Cuogeihong/CEASC 为了进一步减轻SC中的信息损失,使训练过程更加稳定,我们在训练过程中除了稀疏卷积之外,还保持了正常的密集卷积,生成…

JAVA- 面向对象编程(上)

🌈个人主页: Aileen_0v0🔥系列专栏:PYTHON学习系列专栏💫个人格言:"没有罗马,那就自己创造罗马~" 目录 面向对象的特征及理解 new Static Summary: 面向对象的特征及理解 面试题:oop的三大特征是什么? ---> 封装,继承,…

Gorm 中的迁移指南

探索使用 GORM 在 Go 中进行数据库迁移和模式更改的世界 在应用程序开发的不断变化的景观中,数据库模式更改是不可避免的。GORM,强大的 Go 对象关系映射库,通过迁移提供了一种无缝的解决方案来管理这些变化。本文将作为您全面的指南&#xf…

【数据结构】败者树的建树与比较过程

文章目录 前置知识归并段 建树过程比较过程疑问为什么比较次数减少了?如果某个归并段的元素一直获胜,没有元素了怎么办?处理方法 1处理方法 2 前置知识 归并段 外部排序算法通常用于处理大规模数据,其中数据量远超过计算机内存的…

社区牛奶智能售货机为你带来便利与实惠

社区牛奶智能售货机为你带来便利与实惠 低成本:社区牛奶智能货机的最大优势在于成本低廉,租金和人工开支都很少。大部分时间,货柜都是由无人操作来完成销售任务。 购买便利:社区居民只需通过手机扫码支付,支付后即可自…

哈希表----数据结构

引入 如果你是一个队伍的队长,现在有 24 个队员,需要将他们分成 6 组,你会怎么分?其实有一种方法是让所有人排成一排,然后从队头开始报数,报的数字就是编号。当所有人都报完数后,这 24 人也被分…

【Python环境管理工具】Anaconda安装及使用教程

Anaconda安装及使用教程 1 Anaconda简介2 Anaconda下载及安装2.1 下载及安装2.2 手动配置环境变量(重点)2.3 测试Anaconda环境是否配置成功 3 Anaconda使用教程3.1 Anaconda Prompt环境管理的常用命令3.1.1 检查conda3.1.2 管理运行环境 4 Pycharm与Anac…

C++ STL 迭代器失效

一、学习资料 STL迭代器的使用 二、vector容器获取值是下标法和at()的区别 vector<int> vA; int array[]{0,1,2,3,4}; vA.assign(array,array5); cout<<vA[6]<<endl; cout<<va.at(6)<<endl;如上述代码&#xff0c;当使用vA[6]的方式出现访问越…

EASYX播放音频文件

添加winmm.lib的依赖 选中链接器中的输入选项&#xff1a;添加附加依赖项winmm.lib并且应用即可 添加音频相关代码 #include <easyx.h> #include <stdio.h> #include <math.h> // 宏定义 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define MAX_…

K8s学习笔记——资源组件篇

引言 前一篇文章我们介绍了K8s的概念理解和常用命令&#xff0c;这篇我们重点介绍K8s的资源组件和相关配置使用。 1. Node & Pod Node: 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。为了管理 Pod&#xff0c;每个 Node 节点上至少要运行…

剖析 Tomcat 线程池与 JDK 线程池的区别和联系

文章目录 引言JDK 线程池Tomcat 线程池Tomcat 连接器Tomcat 的 ExecutorTomcat 线程池配置 区别和联系区别联系 结论 &#x1f389;欢迎来到Java面试技巧专栏~剖析 Tomcat 线程池与 JDK 线程池的区别和联系 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a…

qt报错permission denied

写fk项目的时候&#xff0c;报这个错&#xff0c;然后网上查&#xff0c;说的是因为之前运行的qt进程没有关闭&#xff0c;然后我在任务管理器上查看&#xff0c;却没有看见有我正在运行的qt程序&#xff0c;我再出现清除 qmake也不可以&#xff0c;然后我再去删除out目录下的所…

软件提示msvcp110.dll丢失的5个修复方法,快速解决dll丢失问题

你是否曾遇到过msvcp110.dll文件丢失的情况&#xff1f;msvcp110.dll是Microsoft Visual C 2012运行时库中的一个动态链接库文件&#xff0c;它是Visual Studio 2012编译的程序所必需的。它包含了许多C标准库函数的实现&#xff0c;如字符串处理、数学运算等。当我们运行一个程…

C# 文件 文件夹 解除占用

文件/文件夹 解除占用或直接删除。 编程语言&#xff1a;C# 这个就不用过多功能描述了。 注册windows 文件/文件夹 右键菜单。 文件夹解除占用&#xff1a;遍历文件夹所有文件&#xff0c;判断是否被占用&#xff0c;先解除文件占用&#xff0c;后解除文件夹占用&#xff0…

Pikachu(一)

暴力破解 Burte Force&#xff08;暴力破解&#xff09;概述 “暴力破解”是一攻击手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录&#xff0c;直到得到正确的结果。 为了提高…

uni-app学习笔记

目录 一、前期准备 1、项目认识 2、pages.json基本配置 3、创建页面 二、tabBar 1、获取图标 2、代码配置 三、基础认识 1、页面生命周期 2、App.vue应用生命周期 四、基础组件 1、scroll-view可滚动视图区域 2、提示框 3、swiper滑块视图容器 4、form表单组件 一…