当前位置: 首页 > news >正文

加解密相关

 1.hash算法(摘要认证)

1.1MD5

MD5 具有很高的安全性,可以产生出一个128位(16字节)的散列值(hash value),它对应任何字符串都可以加密成一段唯一的固定长度的代码,用于确保信息传输完整一致。

目前MD5加密算法是不可逆的,当然这种方式加密的密文也不需要解密,需要的时候直接发送原始密文就好。

实现步骤:

1.1.1填充对齐

对源数据进行填充,使其变成一个(N*512-64)位大小的数据
填充方法:在消息后面进行填充,填充第一位为1,其余为0。

再加上64位表示原数据的长度,填充后就是512整数倍。

1.1.2分块分组

按每个512位为一组进行分组,每组里面分成16个32位,也就是16个int。

  • 四个常量
A=0x01234567 
B=0x89abcdef 
C=0xfedcba98 
D=0x76543210 
  • 四个基础线性函数
F(X,Y,Z) = (X & Y) | ((~X) & Z);
G(X,Y,Z) = (X & Z) | (Y & (~Z)); 
H(X,Y,Z) = X ^ Y ^ Z; 
I(X,Y,Z) = Y ^ (X | (~Z));

(&是与,|是或,~是非,^是异或) 
  • 四个数据处理函数
    Mj表示第M组第j个int数
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<<s)
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<<s)
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<<s)
II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<<s)

1.2.3对分组进行计算(每块进行多轮压缩)

第一轮
a=FF(a,b,c,d,M0,7,0xd76aa478)
b=FF(d,a,b,c,M1,12,0xe8c7b756)
c=FF(c,d,a,b,M2,17,0x242070db)
d=FF(b,c,d,a,M3,22,0xc1bdceee)
a=FF(a,b,c,d,M4,7,0xf57c0faf)
b=FF(d,a,b,c,M5,12,0x4787c62a)
c=FF(c,d,a,b,M6,17,0xa8304613)
d=FF(b,c,d,a,M7,22,0xfd469501)
a=FF(a,b,c,d,M8,7,0x698098d8)
b=FF(d,a,b,c,M9,12,0x8b44f7af)
c=FF(c,d,a,b,M10,17,0xffff5bb1)
d=FF(b,c,d,a,M11,22,0x895cd7be)
a=FF(a,b,c,d,M12,7,0x6b901122)
b=FF(d,a,b,c,M13,12,0xfd987193)
c=FF(c,d,a,b,M14,17,0xa679438e)
d=FF(b,c,d,a,M15,22,0x49b40821)

第二轮
a=GG(a,b,c,d,M1,5,0xf61e2562)
b=GG(d,a,b,c,M6,9,0xc040b340)
c=GG(c,d,a,b,M11,14,0x265e5a51)
d=GG(b,c,d,a,M0,20,0xe9b6c7aa)
a=GG(a,b,c,d,M5,5,0xd62f105d)
b=GG(d,a,b,c,M10,9,0x02441453)
c=GG(c,d,a,b,M15,14,0xd8a1e681)
d=GG(b,c,d,a,M4,20,0xe7d3fbc8)
a=GG(a,b,c,d,M9,5,0x21e1cde6)
b=GG(d,a,b,c,M14,9,0xc33707d6)
c=GG(c,d,a,b,M3,14,0xf4d50d87)
d=GG(b,c,d,a,M8,20,0x455a14ed)
a=GG(a,b,c,d,M13,5,0xa9e3e905)
b=GG(d,a,b,c,M2,9,0xfcefa3f8)
c=GG(c,d,a,b,M7,14,0x676f02d9)
d=GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三轮
a=HH(a,b,c,d,M5,4,0xfffa3942)
b=HH(d,a,b,c,M8,11,0x8771f681)
c=HH(c,d,a,b,M11,16,0x6d9d6122)
d=HH(b,c,d,a,M14,23,0xfde5380c)
a=HH(a,b,c,d,M1,4,0xa4beea44)
b=HH(d,a,b,c,M4,11,0x4bdecfa9)
c=HH(c,d,a,b,M7,16,0xf6bb4b60)
d=HH(b,c,d,a,M10,23,0xbebfbc70)
a=HH(a,b,c,d,M13,4,0x289b7ec6)
b=HH(d,a,b,c,M0,11,0xeaa127fa)
c=HH(c,d,a,b,M3,16,0xd4ef3085)
d=HH(b,c,d,a,M6,23,0x04881d05)
a=HH(a,b,c,d,M9,4,0xd9d4d039)
b=HH(d,a,b,c,M12,11,0xe6db99e5)
c=HH(c,d,a,b,M15,16,0x1fa27cf8)
d=HH(b,c,d,a,M2,23,0xc4ac5665)

第四轮
a=II(a,b,c,d,M0,6,0xf4292244)
b=II(d,a,b,c,M7,10,0x432aff97)
c=II(c,d,a,b,M14,15,0xab9423a7)
d=II(b,c,d,a,M5,21,0xfc93a039)
a=II(a,b,c,d,M12,6,0x655b59c3)
b=II(d,a,b,c,M3,10,0x8f0ccc92)
c=II(c,d,a,b,M10,15,0xffeff47d)
d=II(b,c,d,a,M1,21,0x85845dd1)
a=II(a,b,c,d,M8,6,0x6fa87e4f)
b=II(d,a,b,c,M15,10,0xfe2ce6e0)
c=II(c,d,a,b,M6,15,0xa3014314)
d=II(b,c,d,a,M13,21,0x4e0811a1)
a=II(a,b,c,d,M4,6,0xf7537e82)
b=II(d,a,b,c,M11,10,0xbd3af235)
c=II(c,d,a,b,M2,15,0x2ad7d2bb)
d=II(b,c,d,a,M9,21,0xeb86d391)

每轮循环后,将A,B,C,D分别加上a,b,c,d,然后进入下一循环

1.2.4解释问题

  • MD5为什么能把一个不管多长的文件都变成定长的
MD5使用4个32位的数据,和数据中的每个32位的数据进行计算,最终输出这4个32位数

2.对称加密:DES、AES

2.1DES

加密过程

①将明文分为64位的分组,首先对64位码做初始IP置换,再进行16论迭代变换,其中包括ESP三种运算,最后进行逆初始置换。

(对称)涉及到了15个表,前三个用来计算子密钥,然后接着两个初始化表计算初始数据的置换,完成之后有一个F和(8个表)、P和最后一次置换表,把初始密钥经过计算转换,然后经过循环,然后经过置换,得到16位子密钥,初始数据块通过初始置换和扩展置换得到数据块,然后通过s和,一共八块的置换,得到结果,再通过p和置换,最后得到左右右左32个,一共64个,得到最终置换,最终得到最终数据;算法为密码体制中的对称密码体制,主要用于明文的加密或密文的解密,是一种效率较高的加密算法; CBC模式通过对分组密码增加简单的操作和反馈,避免ECB出现的密文和明文一一对应的问题,也就是后面的加密解密与前面有依赖关系,在CBC模式中用之前的密文分组进行反馈,这样就不会出现一对一的问题,在加密时,用前一个输出的密文分组与当前明文进行异或,然后再加密,当解密时将前一个输出的明文分组与密文分组求异或,再解密可以简单表示(计算子密钥、初始化数据块、对数据块进行加密)效率好,速度快(结果64位)

DES加密算法用途

    DES是一种数据加密标准,主要用于明文的加密或密文的解密,是一种效率较高的加密

2.2 AES

3.非对称

rsA:非对称

把位数相同的素数写到相应的表中去,然后把素数表删除掉,通过相应的函数制造公钥和私钥,公钥主要是与(p-1)(q-1)做逆元关系,私钥做逆元运算,他们互不相关

  

  1. RSA加密算法用途

     网络传输、银行系统、军事情报,数字签名等

SHA:

补位、补长度、使用的常量、计算消息摘要,加密不揭秘

  1. SHA加密算法用途

   数字签名、数字时间戳、数字证书

RC4

是一些广泛使用的协议和标准的一部分,常用于无线通信网络加密的WEP和WPA,以及TLS(Transport Layer Security),还被集成于Microsoft Windows、Lotus notes、Apple AOCE等应用中算法简单、速度快,不管是软件还是硬件,实现起来都十分容易,因而应用广泛。(对称)

  

RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。

相关文章:

  • 【TypeScript教程】# 6:使用webpack打包ts代码
  • Pytorch环境配置(anaconda安装+独显+CUDA+cuDNN)
  • Incorrect string value: ‘\xE6\x9D\x91\xE4\xB8\x8A...‘ for column ‘name‘错误解决
  • git --- git撤销commit(未push)
  • python爬虫的防盗链
  • 【UI自动化】实现C站三连功能
  • 网络规划与部署—ACL命名实验
  • MATLAB-随机森林实现数据回归分析预测
  • SQL考试练习题及全部答案
  • 【C++】内联函数、auto、范围for循环,nullptr
  • Mybatis(第一篇)
  • nodejs+vue+elementui旅游资源网站python-java景点门票预订网站php
  • ArrayList 源码浅析
  • 毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32
  • 【区块链】从社区平台MOJOR看,为何Web3需要原生?
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Angularjs之国际化
  • Github访问慢解决办法
  • HTML5新特性总结
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • overflow: hidden IE7无效
  • select2 取值 遍历 设置默认值
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • SwizzleMethod 黑魔法
  • TCP拥塞控制
  • tweak 支持第三方库
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 回流、重绘及其优化
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于web的全景—— Pannellum小试
  • 记一次和乔布斯合作最难忘的经历
  • 前端知识点整理(待续)
  • 入门级的git使用指北
  • 使用Swoole加速Laravel(正式环境中)
  • 微服务框架lagom
  • 限制Java线程池运行线程以及等待线程数量的策略
  • Linux权限管理(week1_day5)--技术流ken
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)甲方乙方——赵民谈找工作
  • (转)重识new
  • *** 2003
  • .describe() python_Python-Win32com-Excel
  • .NET Framework 4.6.2改进了WPF和安全性
  • @Autowired注解的实现原理
  • @synthesize和@dynamic分别有什么作用?
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [.net]官方水晶报表的使用以演示下载
  • [android] 看博客学习hashCode()和equals()
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [C++]二叉搜索树