对称/非对称加密
对称加密和非对称加密是两种主要的加密方式,用于保护数据的机密性和完整性。它们在密钥的使用和管理上有着显著的不同。
对称加密
原理
对称加密(Symmetric Encryption)使用相同的密钥进行加密和解密。这意味着发送方和接收方必须共享相同的密钥。其加密和解密过程可以简单描述如下:
-
加密过程:
- 明文(Plaintext)通过对称加密算法和密钥(Key)进行处理,生成密文(Ciphertext)。
- 公式:
Ciphertext = Encrypt(Plaintext, Key)
-
解密过程:
- 密文通过相同的对称加密算法和密钥进行处理,还原为明文。
- 公式:
Plaintext = Decrypt(Ciphertext, Key)
常见的对称加密算法
- DES(Data Encryption Standard):一种早期的对称加密算法,使用56位密钥。
- AES(Advanced Encryption Standard):一种现代对称加密算法,支持128位、192位和256位密钥长度。
- 3DES(Triple DES):DES的增强版,通过三次加密提高安全性。
非对称加密
原理
非对称加密(Asymmetric Encryption)使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥用于加密,私钥用于解密。加密和解密过程如下:
-
加密过程:
- 发送方使用接收方的公钥对明文进行加密,生成密文。
- 公式:
Ciphertext = Encrypt(Plaintext, Public Key)
-
解密过程:
- 接收方使用自己的私钥对密文进行解密,还原为明文。
- 公式:
Plaintext = Decrypt(Ciphertext, Private Key)
这种方法解决了密钥分发的问题,因为公钥可以公开,只有私钥需要保密。
常见的非对称加密算法
- RSA(Rivest-Shamir-Adleman):一种常见的非对称加密算法,基于大整数因子分解的困难性。
- ECC(Elliptic Curve Cryptography):一种基于椭圆曲线数学的非对称加密算法,提供与RSA相同安全级别的同时使用更短的密钥。
对称加密和非对称加密的比较
- 速度:对称加密通常比非对称加密更快,适合处理大量数据。
- 密钥管理:对称加密需要安全地共享密钥,而非对称加密通过公钥和私钥的分离简化了密钥管理。
- 应用场景:
- 对称加密常用于数据的批量加密,如文件加密和数据库加密。
- 非对称加密常用于密钥交换和数字签名。
这两种加密方式各有优劣,常常在实际应用中结合使用。例如,在SSL/TLS协议中,非对称加密用于密钥交换,而对称加密用于数据传输。
盐值
在加解密过程中,**盐值(Salt)**是一种用于增强密码安全性的技术,特别是在密码哈希和存储中广泛使用。盐值的作用主要体现在以下几个方面:
盐值的定义
盐值是一个随机生成的字符串,在对密码进行哈希处理之前,将其与密码组合在一起。这个组合后的字符串再通过哈希函数生成最终的哈希值。盐值通常是唯一的,并且在每次用户注册或密码变更时生成不同的盐值。
盐值的作用
-
防止彩虹表攻击:
- 彩虹表攻击是一种通过预计算大量可能的哈希值并存储在表中来快速破解密码的方法。因为常用密码(如“123456”)的哈希值是固定的,攻击者可以使用预先计算好的哈希值直接找到原密码。
- 加入盐值后,即使多个用户使用相同的密码,由于每个用户的盐值不同,最终生成的哈希值也不同,从而防止了彩虹表攻击。
-
增加哈希值的复杂性:
- 盐值增加了密码的长度和复杂性,使得简单密码变得更加难以猜测。
- 这也意味着攻击者在试图进行暴力破解时,需要为每个不同的盐值和密码组合计算哈希值,大大增加了破解难度和时间。
-
防止相同密码产生相同哈希值:
- 如果没有盐值,相同的密码将生成相同的哈希值。攻击者可以通过比较哈希值,找出使用相同密码的账户。
- 盐值确保即使密码相同,由于盐值不同,最终生成的哈希值也不同,从而保护用户的隐私。
盐值的使用过程
-
生成盐值:
- 在用户设置或更改密码时,生成一个随机的盐值。这个盐值的长度和复杂度应足够大,以保证其唯一性和安全性。
-
组合密码和盐值:
- 将生成的盐值与用户输入的密码组合在一起。通常是将盐值附加在密码的前面或后面,或通过其他定义的方式进行组合。
-
计算哈希值:
- 对组合后的字符串进行哈希处理,生成最终的哈希值。
-
存储哈希值和盐值:
- 将生成的哈希值和盐值存储在数据库中。注意,盐值不需要保密,可以明文存储,因为它的作用主要在于防止攻击者轻易破解密码。
示例代码
下面是一个简单的示例代码,展示了如何使用盐值进行密码哈希处理:
import hashlib
import os# 生成随机盐值
def generate_salt():return os.urandom(16) # 生成16字节的随机盐值# 生成密码哈希
def hash_password(password, salt):# 将盐值与密码组合salted_password = salt + password.encode('utf-8')# 使用SHA-256哈希算法生成哈希值return hashlib.sha256(salted_password).hexdigest()# 示例
password = "my_secure_password"
salt = generate_salt()
hashed_password = hash_password(password, salt)print("Salt:", salt.hex())
print("Hashed Password:", hashed_password)
在上述示例中,盐值通过os.urandom()生成,并与密码组合后使用SHA-256进行哈希处理。最终生成的哈希值和盐值可以存储在数据库中。
总结
盐值在加解密过程中,特别是在密码哈希处理中,起到了增强安全性的作用。它通过增加密码哈希的复杂性,防止彩虹表攻击和暴力破解,使得密码存储更加安全。
相关文章:
对称/非对称加密
对称加密和非对称加密是两种主要的加密方式,用于保护数据的机密性和完整性。它们在密钥的使用和管理上有着显著的不同。 对称加密 原理 对称加密(Symmetric Encryption)使用相同的密钥进行加密和解密。这意味着发送方和接收方必须共享相同…...
DDei在线设计器-API-DDeiSheet
DDeiSheet DDeiSheet是代表一个页签,一个页签含有一个DDeiStage用于显示图形。 DDeiSheet实例包含了一个页签的所有数据,在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。 一个DDeiFile实例至少包含一个DDeiSheet…...
随想录 Day 69 并查集 107. 寻找存在的路径
随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一种数组结构// 并查集初始化 void init() {for (int i 0; i < n; i)…...
Hi3861 OpenHarmony嵌入式应用入门--LiteOS Mutex
CMSIS 2.0接口中的Mutex(互斥锁)是用于在多线程环境中保护共享资源的访问机制。Mutex(互斥锁)是一种特殊的信号量,用于确保同一时间只有一个线程可以访问特定的共享资源。 在嵌入式系统或多线程应用中,当多…...
使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集
文章目录 一、什么是“软件I2C”和“硬件I2C”1.1 什么是“软件I2C”1.2 什么是“硬件I2C” 二、软件I2C和硬件I2C2.1 软件模拟2.2硬件I2C 三、配置STM32CubeMX四、配置keil代码4.1 创建文件4.2 复制文件4.3 在keil中添加文件4.4 添加路径4.5 代码修改 五、硬件连接六、总结 一…...
Huffman树——AcWing 148. 合并果子
目录 Huffman树 定义 运用情况 注意事项 解题思路 AcWing 148. 合并果子 题目描述 运行代码 代码思路 其它代码 代码思路 Huffman树 定义 它是一种最优二叉树。通过构建带权路径长度最小的二叉树,经常用于数据压缩等领域。 运用情况 在数据压缩中&a…...
05 Pytorch 数据读取 + 二分类模型
05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型 01 数据读取 DataLoader(set作为参数) 02 Dataset 从哪读,怎么读? 功能:数据从哪里读取? 如何读取…...
数据仓库之Kappa架构
Kappa架构是一种简化的数据处理架构,旨在处理实时数据流,解决传统Lambda架构中批处理和实时处理的复杂性。Kappa架构完全基于流处理,不区分批处理和实时处理,所有数据都是通过流处理系统进行处理。以下是对Kappa架构的详细介绍&am…...
ReactNative进阶(二十八)Metro
文章目录 一、前言二、Metro生命周期2.1 解析(Resolution)2.2 转换(Transformation)2.3 序列化(Serialization) 三、拓展阅读 一、前言 众所周知,Metro 是 React Native 默认的 JavaScript 打包模块。对于前端项目,打包工具已有webpack(大而全ÿ…...
python爬虫入门到精通路线
当谈及Python爬虫从入门到精通的路线时,我们可以将其分为几个关键阶段,每个阶段都有其特定的学习目标和内容。以下是一个清晰的路线规划: 1. 入门阶段 基础知识 学习Python的基础语法、数据类型、控制流等。了解基本的网络协议(…...
Java 笔记:常见正则使用
文章目录 Java 笔记:常见正则使用正则简介常用匹配年月日的时间匹配手机号码校验 参考文章 Java 笔记:常见正则使用 正则简介 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但…...
vue 2.0项目中使用tinymce富文本框遇到的问题
安装Tinymce 现在tinymce-vue最新版本是4.0,用的vue3.0的了,所以搭建的vue2.0项目要使用之前的版本 ( 安装指定版本 ). 首先安装tinymce的vue组件,因为没有注册服务 npm install tinymce/tinymce-vue2.0.0 -S接着安装tinymce: npm install…...
【STM32+FPGA】先进算力+强安全+边缘AI,64位STM32MP2聚焦工业4.0应用
工业应用数字化和智能化程度,是衡量新质生产力的重要标准。STM32最新一代64位微处理器STM32MP2凭借先进算力、丰富接口和高安全性,为高性能和高度互联的工业4.0应用赋能。 STM32MP2四大关键特性,为工业4.0应用赋能 STM32MP2系列的第一颗产品S…...
Git 和 TortoiseGit 安装和配置(图文详解)
使用git,需要在Windows上需要安装两个软件:1)Git 2)TortoiseGit 若需要,可以下载TortoiseGit汉化语言包。 注意:tortoiseGit是在安装了Git的基础上运行的,所以需要先安装Git,后安装…...
OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国
🦉 AI新闻 🚀 OpenAI CTO谈GPT-5将达博士生智力水平 摘要:美国达特茅斯工程学院采访了OpenAI首席技术官米拉・穆拉蒂,她表示GPT-4的智力相当于高中生,而GPT-5将在一年半后发布,预计达到博士生水平。穆拉蒂…...
焦化超低排平台组成部分
焦化行业作为重工业的重要组成部分,其环保问题一直备受关注。近年来,随着环保意识的提升和技术的不断进步,朗观视觉焦化超低排平台应运而生,成为推动焦化行业绿色发展的重要力量。本文将深入剖析焦化超低排平台的组成部分…...
鸿蒙 navigation路由跳转,页面struct 下的生命周期、onShow、onHidden等不会触发问题
经常用安卓思维考虑问题,用习惯了Router方式跳转,但是官方推荐用 navigation,当然它有它的有点, 也有小瑕疵,用了api11 后 发现 navigation路由跳转 ,只要被它包裹的跳转到下页面的,有些生命周期…...
BUUCTF [CISCN2019 华北赛区 Day2 Web1] Hack World
1、通过题目,可以知道该题目为SQL注入类型: 2、判断注入类型为数字注入: 3、通过BP抓包,来判断注入点。 字典爆破发现常规的注入方式都被过滤。 4、因此可以尝试通过布尔盲注的方式来得到flag。编写脚本得到flag import requests…...
wsl2平台鸿蒙全仓docker编译环境快速创建方法
文章目录 1 文章适用范围:2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…...
商业秘密侵权
一、商业秘密侵权行为 (一)员工违规获取并使用企业后台用户行为数据构成商业秘密侵权 (二)离职员工将新单位“冒名顶替”为原单位构成对原单位商业秘密的侵犯 二、商业秘密侵权主体 (一)主体范围界定&a…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
