---------------------------------------------------------------------------------------------------------------

为什么会了解加密的这些东西呢?说来很囧的…………

异想天开的想开发一个微信自动加好友软件,卖给微商们,自己也赚点小钱。。。然后就开始搞吧,最先想到的当然是抓取报文咯。结果发现抓来的是乱码!

无知的我还想通过utraldit编辑器等一些功能来转为正常可读的呢!后来几经查阅资料,得知这是加密后的数据,不解密是无法获取有效信息的。

现在就简单说一下微信中的加密及协议的相关东东吧!

通信协议:微信的通信协议比较简单,登陆的时候可能由于有密码或者登陆本身的重要性,采用了SSL加密传输,其余的聊天、朋友圈、搜好友等等都是采用的HTTP协议;

加密方式:如今微信的用户群已经做到如此庞大,并且涉及到安全支付等重要信息,加密工作自然得做的非常好;据查阅资料得知大概是这样的:客户端要发送的消息,首先采用AES加密,在此基础上再采用RAS加密;这样的话,只有先破解RAS加密,再破解AES加密,才能获取有效信息;由于本人之前对加密等知识一无所知,所以就学习这些加密的东西咯;

-------------不过话说回来,据我推测,自动加好友软件应该不需要完全破解微信的加密协议,因为破解难度实在是太大,几乎不可能做到;那么微信自动加好友软件到底是真没实现的呢?后续继续研究-----------------------后来据了解,这种加密本身很难破解,一般只有利用系统漏洞进行破解。。。但对于安卓系统一无所知的我,,,可能得暂时放一放了。。。【委屈】【委屈】

OK,言归正传,说一说加密算法吧!

加密协议

  加密算法说白了就是数学算法,简单点来说就理解为一个函数吧,将一个数据经过某种复杂处理,映射为另一个数据;这就是加密。加密的关键不是在于加密算法与解密算法本身的编写有多大难度,而是在某些未知条件下,去进行解密的难度;难度越大,则越可靠,当然这也与未知条件的可获取性或者说是隐蔽性有关;

  下面就概述一下常见的加密算法。

DES加密

  DES加密是美国联邦政府采用的一种加密方式,在1998年就已经废弃,被AES加密所替代,不过在国内的很多金融机构中还在应用:DES加密是对称加密,即加密和解密用的密钥相同;采用分组加密的方式;

  输入:key(密钥)、data(加密数据 64位)、mode(加密方式 加密/解密)

  输出:des_data(加密后的数据)

  加密的流程:DES加密本质上是对64位数据的各各位 进行重新排列组合 并于密钥进行运算 循环迭代

  ① 初始置换,得到L0(左32位)  R0(右32位);

  初始置换的规则是固定的

58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7, 

初始置换规则表

  即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0=D57D49...D7。

  ②密钥控制下的16轮加密运算

  密钥:一共 64位,其中 第8、16、24……位是奇偶校验位,所以有效位数是56位;

  在这16轮加密运算过程中,使用的是 由64位密钥产生的48位子密钥进行加密的,各轮的子密钥不同。

    Ⅰ 48位子密钥的生成(不去细究  注意:不考虑每个字节的第8位)

        

    Ⅱ 扩展置换

    扩展置换在右半部分(Ri)的32位进行,由32位扩展到64位(具体过程不详),扩展置换改变了某些位的次序,重复了某些位;

    扩展置换的目的在于 与密钥位数相同,以便进行异或运算;

    扩展为48位之后,便于密钥进行异或运算;

    Ⅲ S盒替代

    S盒替代原理,将一个数 按位拆成两个数,这两个数一个作为行数 一个作为列数,在S表(一个二维表)中找到对应的数。完成替换;

    eg:  21 ——》2  1——》对应找到第二行 第一列的数(一般是化为二进制后进行拆分 为了简单,这儿就这么写了)

    DES中的S盒替代略有差异:

    

    经过S盒替代后,又变为了32位;

    Ⅳ P盒替代

    

  ③逆置换

  处理方式与初始置换是一样的,只是规则表不一样;

40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25, 

逆置换规则表

  ④输出密文

  DES解密

  解密算法是加密算法的逆运算,不在详述;只提一点,解密过程中16轮子密钥与加密过程掌握16轮子密钥的顺序是相反的:即加密子密钥为 K1, K2,……K16;解密子密钥为K16, K15……K1;

------------------------------------------------------------AES------------------------------------------------------------------------------------------

AES加密

AES加密是对称加密、分组加密;密钥长度 分为128位、192位、256位;对应的数据分组也应该分为128位  192位  256位;这三种加密的轮次是不一样的。分别是:10、12、14

加密过程:

① 由原始数据 转为 输入state(二维矩阵 对于选择128位加密,就是4×4矩阵)

② 初始变换

  就是进行轮密钥加(密钥轮加在后面介绍)

③ 循环N轮的变换

  其中 N-1轮变换如下:

  字节代换——》行位移——》列混淆——》轮密钥加

  字节代换,就是基于S盒原理进行,上面有,不多说了!

  行位移:第一行不变,第二行循环左移一个字节,第三行循环左移两个字节,第四行循环左移三个字节

  列混淆:每一列的每一个字节被映射为一个新值,新值是根据这一列的值计算得出(计算方法不详)

  轮密钥加:列混淆后的数据 与 密钥进行异或运算;

下面说一下每一轮的密钥是怎么来的:通过密钥扩展来的,具体不详

  在第N轮,是这样的字节代换——》行位移——》轮密钥加

-----------------------------------------------------------RSA---------------------------------------------------------------------------

RSA 是不对称的加密(加密密钥和解密密钥不同  其中 一个为公钥,一个为私钥);

  公钥和私钥的产生是基于一对很大的素数(十进制来说  大于100位)

  首先来看 公钥和私钥的产生

    ①选取两个很大的素数  p、q,计算 n=p*q

    ②随机选取一个加密密钥e   要求,e和(p-1)*(q-1)互质  且 e<(p-1)*(q-1)

    ③最后 根据e  p   q计算解密密钥d,使得d满足   e*d= 1 (mod(p-1)(q-1))  并且 n和d也要互质

    这样 数e和n是公钥   e是私钥,p q两个则不再需要,应该丢弃,不让任何人知道;

  加密方法:

  首先 将加密数据分成等长的数据块 m1  m2   m3……   每一块长度为s  使得 2^s<=n

  则 mi 对应的密文 是ci = mi^e ( mod n )

  解密方式 mi = ci^d ( mod n ) ( b )

    

转载于:https://www.cnblogs.com/tengpan-cn/p/4768097.html

RAS、AES、DES加密相关推荐

  1. MD5 AES Des 加密解密

    MD5加密不可逆 只能加密,不能解密,代码如下: package com.ruoyi.common.utils.security; import java.security.MessageDigest ...

  2. cbc cryptojs 前后端_前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密

    本文涉及到的内容有:前端使用CryptoJS对数据进行DES或AES加密解密: 后端使用PHP openssl对数据进行解密和加密. 前端AES加密数据 首先在vue环境下安装crypto-js,cr ...

  3. java 和 c# 下的RSA证书+AES+DES加解密实现

    java 和 c# 下的RSA+AES+DES加解密实现 前言 在实际应用中,经常有需要使用加解密的情况,RSA\AES\DES是比较常用的几种加解密方式,使用和实现方式都比较成熟可靠,本文简要介绍一 ...

  4. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  5. DES加密解密与AES加密解密

    × 目录 [1]AES加密算法和DES加密算法的效率比较 [2]AES和DES加密解密代码 随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了 ...

  6. Delphi调用C#的加密解密(Base64/AES/DES/MD5可扩充)

    1. 背景: 近期,由于工作上与第三方公司传输数据的时候需要采取数据加密,但是我们采用的时较低版本的Delphi 6:由于加密算法等差异,导致在传输的加密数据第三方一致解析不了(具体问题表现为base ...

  7. RSA加密解密DES加密解密AES

    文章目录 RSA java 依赖 RSACoder RSACoderTest js示例 DES 示例一 js java 示例2 js java AES AesUtil RSA java 依赖 < ...

  8. JS逆向加密-Cryptojs库AES/DES/RSA等代码

    目录 一.crypto-js 二.nodejs之md5.sha1.sha256.base64 三.crypto-js之AES 四.crypto-js之DES 五.crypto-js之3DES 六.Py ...

  9. AES,DES,3DES加密方式的特点

    SUMMARY DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,注意: 实际中DES算法只用了 ...

最新文章

  1. jsp在java软件中_5.2在JSP中使用JAVABEAN
  2. python创建csv文件并写入-【已解决】Python中创建和保存数据到csv文件中
  3. innobackupex --rsync 报错 Error: can't create file (null)/xtrabackup_rsyncfiles_pass1
  4. RuntimeError: dictionary changed size during iteration
  5. P2386 放苹果 方法一
  6. 带你深入理解Java的IO到底是个啥
  7. centos安装最新的visual studio code并设置中文
  8. zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  9. 简述Java三大特性
  10. 天然气阶梯是按年还是按月_天然气阶梯不是明年1月1号开始么?怎么现在充气就限量了...
  11. Unity和UE4两大游戏引擎,你该如何选择?
  12. 弦截法及Python实现
  13. jupyter notebook出现kernel waitting,please wait一系列错误的解决办法
  14. 一文理解所有需求分析中的基本术语
  15. 2022年有高级软考职称可以入深户吗?
  16. 5款OCR文字识别软件推荐_分享好用的OCR(图片转文字)工具
  17. Excel修改证件照图片背景色
  18. web页面大数据可视化大屏展示案例分享
  19. 排序-------冒泡实现(Java实现)
  20. 极光推送SDK引起的内存泄露排查

热门文章

  1. python中data.find_all爬取网站为空列表_利用Golang快速爬取盗版网站的整套音频
  2. OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署
  3. oracle jde 实施,OracleJDE系统EDI数据接口的实施.doc
  4. java追加到文件末尾_Java追加到文件
  5. 在Scala中评估val,var,lazy val和def构造时
  6. [修复] Eclipse – Java编译器级别与已安装的Java项目构面的版本不匹配
  7. office 365将英文改为中文
  8. 【Objective-C】Objective-C语言的动态性
  9. 企业网站建设注意事项
  10. 遗留非springboot传统项目接入eureka注册与服务发现