网站建设app开发合同,wordpress推广码,wordpress的vieu主题破解版,建设电子书阅读网站CRYPTO现代密码学学习 RC4 加密算法RSA加密解密DES加密解密详解密钥的生成密文的生成 RC4 加密算法
简单介绍#xff1a;RC4加密算法是一种对称加密算法#xff0c;加密和解密使用同一个函数 初始化分为以下几个步骤
初始化存储0-255字节的Sbox(其实就是一个数组)填充key到… CRYPTO现代密码学学习 RC4 加密算法RSA加密解密DES加密解密详解密钥的生成密文的生成 RC4 加密算法
简单介绍RC4加密算法是一种对称加密算法加密和解密使用同一个函数 初始化分为以下几个步骤
初始化存储0-255字节的Sbox(其实就是一个数组)填充key到256个字节数组中称为Tbox(你输入的key不满256个字节则初始化到256个字节)交换s[i]与s[j] i 从0开始一直到255下标结束. j是 s[i]与T[i]组合得出的下标 // 步骤一、初始化赋值
for (i0;i256;i){S[i] i;T[I] K[i mod keylen];}
// 步骤二、用T产生S的初始置换
j 0;for (i0; i256; i){j (j S[i] T[i]) mod 256;swap(S[i],S[j]);}// 步骤三、得到密钥流K每次计算出一个K
ij0;for(h0; hdatalen; h){i(i1) mod 256;j(jS[i]) mod 256;swap(S[i],s[j]);t(S[i]S[j]) mod 256;KS[t];// D[h]^K; 亦或得到密文}
RC4加密解析传送阵
RSA加密解密 求解私钥的步骤 欧拉函数表示表示与n互质的数的个数 eg
[WUSTCTF2020]babyrsa
c 28767758880940662779934612526152562406674613203406706867456395986985664083182
n 73069886771625642807435783661014062604264768481735145873508846925735521695159
e 65537若要求解私钥必须要分解n得到两个质数pqhttp://www.factordb.com/index.php
p 189239861511125143212536989589123569301
q 386123125371923651191219869811293586459求解私钥d以及明文m
from Crypto.Util.number import long_to_bytes
from Crypto.Util.number import *q 189239861511125143212536989589123569301
p 386123125371923651191219869811293586459e 65537
c 28767758880940662779934612526152562406674613203406706867456395986985664083182
# n 73069886771625642807435783661014062604264768481735145873508846925735521695159
n q * p
# print(n)
d gmpy2.invert(e, (p - 1) * (q - 1))
print(d, d)
m pow(c, d, n)此处有疑问了明文是如何转为这么一大长串数字呢
import Crypto
from Crypto.Util.number import bytes_to_long
import os
t os.urandom(4) # os.urandom(len)方式产生长度为len的随机字节串
print(t)
for i in t:print(i)
print(bytes_to_long(t)) # 调用函数计算long整型值计算原理29*pow(2,24) 30*pow(2,16) 150*pow(2,8) 148*pow(2,0)
大数在此处的类是mpz引用了GMP库参考传送阵
判断字符串中所有字符是否都是可打印字符。
Unicode字符集中“Other” “Separator”类别的字符为不可打印的字符但不包括ASCII码中的空格0x20。可用于判断转义字符。 ASCII码中第032号及第127号是控制字符第33126号是可打印字符其中第4857号为09十个阿拉伯数字6590号为26个大写英文字母97 122号为26个小写英文字母。 ascii码在0~255字符中只有189个字符能被打印。
lst []
for idx,val in enumerate(range(256)):if chr(val).isprintable():lst.append(idx)
print(len(lst))
print(set(range(256)) - set(lst))DES加密解密详解
Data Encryption Standard 就不主动写了这篇文章讲的非常详细 https://www.hankcs.com/security/des-algorithm-illustrated.html
密钥的生成
子密钥K1~K16的生成 密钥转为2进制的初始密钥初始密钥进行PC-1置换得到56位的密钥 将这56bit密钥均分为两个28bit左半部分 (C0) 右半部分 (D0) 将得到的 C0D0 按照给定的移位表依次进行移位 子密钥的CiDi 轮是由 Ci-1Di-1 循环移位运算得到的off [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]即C1为C0向左循环移位1D1为D0向左循环移位1C2为C1向左循环移位1D2为D1向左循环移位1C3为C2向左循环移位2D3为D2向左循环移位2最后将其 Ci 与 Di 合并为 CiDi 。将合并后的每个 CiDi 经过PC-2置换得到K1~K16。
密文的生成 和密钥的生成一样先进行一个初始置换换了个名字叫IP置换只不过密钥是将校验位去掉了而明文的加密不需要验证。 初始置换后将其均分为左边32位 L0右边32位 R0。 密文的加密规则如下图 需要经过f函数的加密16轮得到的 L16 R16 接着再次进行一个IP逆置换形成最终的密文。 重要的就是这16轮的加密。 加密函数 Ln Rn-1 Rn Ln-1 ㊉ f (Rn-1,Kn) f函数步骤如下eg L1 R0R1 L0 ㊉ f(R0K1)R0 为32位K1为48位所以要进行32-48位的E盒扩展 扩展规则以4为单位分为8组每组首位前添加前相邻位末位后添加相邻位如下图所示扩展为48位后与对应的子密钥进行亦或即 R0 ㊉ K1得到另一组最终48位的数据。分开后的密文序列是32位的所以还要对其进行S盒压缩最终将8组6bit的数据被转换为8组4bit一共32位的数据。 将48位数据化为8组6bitB1B2B3B4B5B6B7B8 每组含有6bit经过以下运算 S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) 最终得到的8组6bit的数据 S盒计算eg 101010到S1中。S1会将这六位的第一位1和第六位0拿出来组成10作为S1的行中间四位0101拿出来作为S1的列。我们转换成十进制此时映射到这个S盒的位置就是(2,5)对应S盒的第3行第6列索引都从0开始数。 将得到的32位数据在经过P盒置换得到数据即为f函数结束 将最终经过f函数的数据与 L0 亦或得到 R1即 L0 ㊉ 上一步结果 重复上面步骤至16轮在第16轮后将R16 与 L16 拼接为 R16L16。 R16L16 经过IP-1盒逆置换得到最终16进制数即为密文。
注意 DES加密算法中
密钥 置换PC-1盒64位去掉校验位为56位简单表替换 置换PC-2盒取56位密钥中的48位简单表替换密文 置换IP盒将原明文数据打乱简单表替换数据位数不变 扩展E盒将分开的32位扩展为48位 压缩S盒将已经经过f函数变换后的48位数据(8组6bit)变回原来的32位(8组4bit)用于下次f函数的计算 置换P盒将S盒的到的数据进行置换简单表替换数据位数依旧为32位。经P盒置换后的数据和 L0 做 ㊉ 得到下一步的 Ri1 . 逆置换IP-1盒合并后 R16L16 简单表替换数据位数不变64bit。