数据安全-签名、加密、与填充

加密与解密

加密:将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文。

解密:使用密钥及对应的解密算法对密文进行解密,使其恢复成可读明文。

加解密通常需要使明文数据按照一定长度对齐,叫做块大小(BlockSize),例如AES加解密的BlockSize为16字节,RSA加解密的BlockSize等于密钥长度。

如果数据长度无法对齐到要求的长度,就需要使用填充算法,加密前与解密后需要使用相同的填充算法对数据进行填充或解填充。

加密与解密一般需要对数据进行分包,将明文数据分包处理后,使用加密算法对每包数据进行运算,求出密文数据,每包密文数据的长度通常都是等长的,将每包密文依次连接,形成完整的密文数据。

解密时,按照加解密算法对应的包长度,依次将每包密文进行解密运算,拼凑出明文数据。

对称加解密

加密密钥与解密密钥相同的加密算法。

特点:

  1. 算法公开

  2. 计算量小

  3. 速度快,效率高

  4. 密钥传输与密钥管理麻烦

通常用于对大量数据进行加密,

常用的加密算法:AES、DES。

AES算法

AES算法安全性与密钥长度关联,密钥长度越长,越安全。

AES密钥分为AES128、AES192、AES256。

明文需要被分为固定长度的块进行加密,BlockSize为16字节。

数据如果被损坏,解密能正常运算,但会得到错误的明文。

AES-ECB

  • ECB模式是最简单的AES加密模式

  • 使用一个固定长度的密钥

  • 固定的明文将会生成固定的密文,如果有两个相同的明文块,则加密结果也相同。

    优点

    简单,有利于并行计算,误差不会传递。

    缺点

    安全性低,容易被爆破

** 加密流程**
在这里插入图片描述
解密流程
在这里插入图片描述
AES-CBC

  • 加解密需要使用一个固定长度的密钥

  • 加解密需要一个16字节的初始向量

  • 相同的明文不会生成相同的密文

优点

安全性比ECB好

缺点

不利于并行计算,误差会被传递,需要保存初始向量IV

加密流程
在这里插入图片描述
解密流程
在这里插入图片描述

非对称加解密

使用一对唯一的密钥,即公钥与私钥,两个密钥数学相关,通过公开的公钥,无法计算出私钥。

使用私钥加密的信息,可以使用公钥进行解密

使用公钥加密的信息,只能使用私钥进行解密。

应用场景:

A使用公开密钥加密的信息,发送给B,只有拥有私钥的B才能解密,保证了数据的安全性。

B使用私钥加密的数据,发送给A,只有对应的公钥才能解密,保证了数据的合法性。

RSA算法

RSA密钥构成

RSA私钥:公共模数N+私钥指数D。

RSA公钥:公共模数N+公钥指数E。

公钥可从私钥中获取,私钥不能从公钥中获取。

RSA密钥格式

PKCS#1与PKCS#8能够互相转换。

PKCS#1

密钥对的开始部分为:-----BEGIN RSA PRIVATE KEY-----或 -----BEGIN RSA PUBLIC KEY-----。

包含了RSA加密,解密,验签等内容,用于存储RSA密钥

PKCS#8

密钥对的开始部分为:-----BEGIN PRIVATE KEY----- 或 -----BEGIN ENCRYPTED PRIVATE KEY----- 或-----BEGIN PUBLIC KEY-----。

专门用来存储私钥的文件格式,比PKCS#1多了一部分内容存储算法信息,因此能够存储各种算法的私钥。

RSA填充模式

RSA算法填充内容存在于数据前端,而不是数据尾部。

填充方式明文最大输入长度输出特点
RSA_NO_PADDING与N等长与N等长当输入不足N时,在数据前端填充0。解密后需去除
RSA_PKCS1_PADDING比N短至少11个字节与N等长当输入不足N时,会填充部分随机数,因此相同明文的密文数据不同。
RSA_PKCS1_OAEP_PADDING比N短至少41个字节与N等长新的填充方式,安全性更高。
RSA密钥长度

RSA512、RSA1024、RSA2048、RSA3072、RSA4096

密钥长度越长,安全性越高,但性能越低。通常使用RSA2048。

密钥长度影响单次加解密的明文或密文长度。

明文长度m必须 0 < m < N。

在这里插入图片描述

ED25519算法

一种高速高安全的签名方法。

密钥

公钥与私钥均为32字节长度,签名长度为64字节。

可使用任意的32字节数据作为私钥,一般使用随机数发生器生成。

通过私钥可生成公钥。

特点
  • 性能高

  • 安全性高,约等价于RSA3000

数据填充规则

ZeroPadding

数据长度不对齐时,在数据段末尾追加0x00,缺少几个字节,就追加几个字节的0x00.

PKCS5Padding

PKCS5是8字节填充的,即填充一定数量的内容,使得成为8的整数倍,而填充的内容取决于需要填充的数目。

例如:

// 原数组
{0x56}
//PKCS5填充
{0x56, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07}

// 原数组
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}
//PKCS5填充
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}

如果已经满足了8的整倍数,按照PKCS5的规则,仍然需要在尾部填充8个字节,并且内容是0x08,目的是为了加解密时统一处理填充。

PKCS7Padding

PKCS7与PKCS5的区别在于PKCS5只填充到8字节,而PKCS7可以在1-255之间任意填充。

由于使用PKCS7Padding/PKCS5Padding填充时,最后一个字节肯定为填充数据的长度,所以在解密后可以准确删除填充的数据,而使用ZeroPadding填充时,没办法区分真实数据与填充数据,所以只适合以\0结尾的字符串加解密

单向散列算法(Hash函数)

不可逆的信息摘要算法。

把任意长的输入消息串变化成固定长的输出串的一种函数。一般用于产生消息摘要。

好的散列算法具备的特性:

  • 单向性:即不可逆。

  • 抗冲突性:即不同的数据产生两个相同散列值的概率很低。

  • 雪崩效应:即原数据发生微小变化,会导致散列值发生巨大差异。

常见用途

  • 密码保护:将用户密码的散列值保存,只有用户自己知道密码。

  • 签名验签:对消息进行签名,接收方进行验签

  • 数据秒传:用户上传大文件时,服务端对比已有文件具的散列值,查找是否有相同文件。

信息摘要算法

  • MD5:产生出一个16字节的散列值,已经不再安全,需要高安全性的场景不推荐使用。

安全散列算法

SHA224、SHA256、SHA384、SHA512:统称为SHA2。

  • SHA1:产生出一个20字节的散列值,不安全不建议使用

  • SHA224:产生出一个28字节的散列值。

  • SHA256:产生出一个32字节的散列值。

  • SHA384:产生出一个48字节的散列值。

  • SHA512:产生出一个64字节的散列值。

签名与验签

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

发送方对文件签名后生成签名数据,签名数据与原数据一起发送,接收方通过对签名数据与原文件进行验证签名,确保文件的完整性。

签名不会对原文件进行加密,签名是为了保证文件的完整性与合法性

签名

  1. 将原始数据使用散列算法,求出散列值。

  2. 使用私钥对散列值进行加密,生成签名数据(散列值密文)。

  3. 将原数据与签名数据发送给接收方。

验签

  1. 使用公钥对签名数据进行解密,获取散列值。

  2. 使用与发送方相同的散列算法,求取数据的散列值。

  3. 比对求取的散列值与解密获取的散列值,如果一致,则说明数据合法。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值