下载频道  >  weixin_44219914的资源
  • 实现数字签名算法(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
    47
  • 利用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
    50
  • 利用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
    9
  • 简单的线性反馈移位寄存器(LFSR)C语言实现

    1)利用C\C++语言实现给定的LFSR; 2)通过不同初始状态生成相应的序列,并观察它们的周期有什么特点; 3)利用生成的序列对文本进行加/解密(按对应位作模2加运算)。 步骤: (1)生成序列:使用#include<bitset>库构造序列,使用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
    50
  • 密码学课设单表仿射C语言实现

    实验内容 1)用C\C++语言实现单表仿射(Affine)加/解密算法; 2)用C\C++语言实现统计26个英文字母出现频率的程序; 3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。

    2020-04-15
    44
  • 分享小兵

    成功上传3个资源即可获取
关注 私信 TA的资源