- 博客(1)
- 资源 (5)
- 收藏
- 关注
原创 ctf web WriteUp1
年纪大了,方法总结的东西不写下来一会儿就忘了web2(bugku) & 佛说 – 白给(asuri)网址链接:http://120.24.86.145:8002/web2/47.102.107.100:39002直接按F12,隐藏在Elements里Asuri另外一题白给2,按F12,Console里点击链接跳转就能看到flag了佛说 – 白给 3网址链接:http:...
2019-10-14 20:52:36
624
实现数字签名算法(DSA),Hash算法的实现C语言
1)利用C\C++语言实现DSA算法。
2)DSA中的Hash函数采用SHA算法。
(1)消息填充:因为我们存储的时候是以字节为单位存储的,所以消息的长度(单位:位)一定是 8 的倍数。而我们填充的时候也一定是 8 位、8 位地来填充。也即不可能只填充一个二进制位,至少是 8 个二进制位(一个字节)。因此最少填充 1 个字节,最多填充 64 个字节(64*8=512)。
在SHA1中,为了HASH小于2^64长度的输入消息,先对消息m的长度进行处理,判断补0后是512位的多少倍。
(2)大整数:因为涉及到几百位的大整数运算,如这里规定p是512位,先封装一个大整数类BigNumber,BigNumber的成员变量有sign, length, uint32_t number[MAXLENGTH], MAXLENGTH规定为128,也就是说这个BigNumber最多可以由128个uint32_t型的数拼起来。
2020-04-15
利用C\C++实现RSA算法的加、解密运算
1)利用扩展的Euclid计算 a mod n 的乘法逆元;
2)Miller-Rabin素性测试算法对一个给定的大数进行测试;
3)实现 的运算,并计算
4)利用Euler定理手工计算 ,并与3)计算的结果对比;
5)实现RSA算法。并对"I LOVE NANJING UNIVERSITY OF AERONAUTICS AND ASTRONAUTICS"加解密。说明:为了方便实现,分组可以小一点,比如两个字母一组。
2020-04-15
利用C\C++实现AES算法的加、解密运算
(1)分组长度128比特,16字节。
(2)定义位操作LOAD32H(x, y) 将uint8_t y[4] 转换成 uint32_t x,STORE32H(x, y) 将uint32_t x 转换成 uint8_t y[4],BYTE(x, n) 从uint32_t x中提取从低位开始的第n个字节,MIX(x) 密钥扩展中的SubWord(RotWord(temp),字节替换然后循环左移1位,ROF32(x, n) uint32_t x循环左移n位,ROR32(x, n) uint32_t x循环右移n位。
(3)密钥扩展:接受16字(128位)初始密钥,相当于 4个32位字,所以Nb=4,Nr=10(10轮),密钥扩展过程产生4*(10+1)= 44个字,最初的4个字为原始密钥。
2020-04-15
简单的线性反馈移位寄存器(LFSR)C语言实现
1)利用C\C++语言实现给定的LFSR;
2)通过不同初始状态生成相应的序列,并观察它们的周期有什么特点;
3)利用生成的序列对文本进行加/解密(按对应位作模2加运算)。
步骤:
(1)生成序列:使用#include库构造序列,使用bint.to_string()将输入的01串转成字符串,用str暂存。将bint[3]和bint[0]异或,赋值给bint[4]也就是a5,循环左移,将bint转成字符串后s1[4]就是生成的a1,将 a1添加到s2后面。当str与现在的bint相同,即周期结束,跳出循环,s2就是生成的完整序列。
(2)加密过程:生成31位序列后,读取待加密文本的每一个字符,和0XFF相与得到8位01串,依次与31位序列按位异或,结果得到8位01串,得到密文,写入ciphertext.txt。
(3)解密过程:每次读入ciphertext.txt中的8个01字符,将其再依次与31位序列按位异或,得到加密前的01串,根据这个01字符串,先转成bitset类型,再转成char型,将每个字母写入解密文件deciphertext.txt,解密结束。
2020-04-15
密码学课设单表仿射C语言实现
实验内容
1)用C\C++语言实现单表仿射(Affine)加/解密算法;
2)用C\C++语言实现统计26个英文字母出现频率的程序;
3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。
2020-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人