• 大小: 611KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: DSA  密码学  

资源简介

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型的数拼起来。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#include“sha1.h“
#include“BigNumber.h“
using namespace std;

#define TEXTTIME 10

BigNumber zero(0);
BigNumber one(1);
BigNumber ten(10);
BigNumber sixteen(16);

BigNumber NUMS[11] = {BigNumber((unsigned int)(0))BigNumber((unsigned int)(1))BigNumber(2)BigNumber(3)BigNumber(4)BigNumber(5)BigNumber(6)
BigNumber(7)BigNumber(8)BigNumber(9)BigNumber((unsigned int)(10))};


BigNumber BigNumber::operator=(BigNumber a)
{
this->length = a.length;
this->sign = a.sign;
for (int i = 0; i < MAXLENGTH; i++)
{
this->number[i] = a.number[i];
}
return *this;
}

BigNumber BigNumber::operator+(BigNumber a)
{
BigNumber c(0);
BigNumber::unsignedaddBigNumber(*this a c);
return c;
}

BigNumber BigNumber::operator-(BigNumber a)
{
BigNumber c(0);
BigNumber::unsignedsubBigNumber(*this a c);
return c;
}

BigNumber BigNumber::operator*(BigNumber a)
{
BigNumber c(0);
BigNumber::unsignedmulBigNumber(*this a c);
return c;
}

BigNumber BigNumber::operator/(BigNumber a)
{
BigNumber c(0);
BigNumber d(0);
BigNumber::unsigneddivBigNumber(*this a c d);
return c;
}

BigNumber BigNumber::operator%(BigNumber a)
{
BigNumber c(0);
BigNumber d(0);
BigNumber::unsigneddivBigNumber(*this a c d);
return d;
}

/*向屏幕输出无符号大整数*/
void BigNumber::unsignedprintBigNumber()
{
stack s; //c++容器 
BigNumber remainder; //余数 
BigNumber tmp = *this;
if (BigNumber::unsignedisEqual(tmpzero))
{
cout << 0 << endl;
}
while (!BigNumber::unsignedisEqual(tmp zero))
{
remainder = tmp % ten;
tmp = tmp / ten;
s.push((unsigned int)(remainder.number[0]));
}
while (!s.empty())
{
cout << s.top();
s.pop();
}
cout << endl;
}

/*根据string构建无符号大整数对象,n代表进制数*/
BigNumber::BigNumber(string sint n)
{
memset(BigNumber::number 0 MAXLENGTH*sizeof(uint32_t));
int len = s.length();
BigNumber resulttmp;
result = zero;
if (n == 10)
{ //十进制
for (int i = 0; i < len; i++)
{
if (i != 0)
{
result = result * ten;
}
result = result + NUMS[int(s[i] - ‘0‘)];
}
*this = result;
}
else if (n == 2)
{ //二进制
for (int i = 0; i < len; i++)
{
if (i != 0)
{
*this = *this*NUMS[2];
}
*this = *this + NUMS[int(s[i] - ‘0‘)];
}
}
else if(n==16) //留坑 
{

}
}

BigNumber::BigNumber(uint64_t num)
{
memset(BigNumber::number 0 MAXLENGTH * sizeof(uint32_t));
if (num >> 32)
{ //num为64位
this->length = 2;
this->number[0] = uint32_t(num&0x00000000ffffffff);
this->number[1] = uint32_t((num >> 32)&0x00000000ffffffff);
}
else
{ //num为32位
this->length = 1;
this->number[0] = uint32_t(num&0x00000000ffffffff);
}
}

BigNumber::BigNumber()
{
memset(BigNumber::number 0 MAXLENGTH * sizeof(uint32_t));
BigNumber::le

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      16324  2020-01-10 15:32  DSA\dsa-3\BigNumber.cpp

     文件       2503  2019-12-03 14:36  DSA\dsa-3\BigNumber.h

     文件     404650  2020-01-10 15:58  DSA\dsa-3\BigNumber.o

     文件       4566  2020-01-10 14:59  DSA\dsa-3\main.cpp

     文件     107780  2020-01-10 15:58  DSA\dsa-3\main.o

     文件        652  2019-11-25 21:56  DSA\dsa-3\plaintext.txt

     文件       4329  2020-01-08 22:10  DSA\dsa-3\sha1.c

     文件        527  2019-12-03 14:02  DSA\dsa-3\sha1.h

     文件     103659  2020-01-08 22:10  DSA\dsa-3\sha1.o

     文件       1404  2019-12-03 17:05  DSA\DSA-3.dev

     文件    2353230  2020-01-10 15:58  DSA\DSA-3.exe

     文件        352  2020-01-10 21:57  DSA\DSA-3.layout

     文件       1428  2020-01-10 21:53  DSA\Makefile.win

     文件        652  2019-11-25 21:56  DSA\plaintext.txt

     文件        413  2020-01-10 21:53  DSA\private.txt

     文件        519  2020-01-10 21:53  DSA\public.txt

     文件        100  2020-01-10 21:53  DSA\signature.txt

     文件        704  2020-01-10 21:53  DSA\tmp

     目录          0  2020-01-10 15:58  DSA\dsa-3

     目录          0  2020-01-10 21:53  DSA

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

              3003792                    20


评论

共有 条评论