SHA-1(安全哈希算法实现)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SHA-1(安全哈希算法实现)

如题,不知道sha-1的自己百度吧。

1 #include

2 #include //定义vector数组

3 #include //记录消息

4usingnamespace std;

5

6constint NUM = 8; //一个字由32比特(或者8个16进制数) 7constint BIT = 512; //消息认证码要以512比特一组

8

9//字常量

10string H0 = "67452301";

11string H1 = "EFCDAB89";

12string H2 = "98BADCFE";

13string H3 = "10325476";

14string H4 = "C3D2E1F0";

15

16//定义SHA1(安全哈希算法)类

17class SHA1

18 {

19public:

20//将一个字符串形式的字转化为vector数组

21 vector hex_into_dec(string word);

22

23//将vector转化为string字符串形式

24string num_into_message(vector A);

25

26//两个字X和Y的逻辑"和"

27 vector word_AND(vector A,vector B); 28

29//两个字X和Y的逻辑"或"

30 vector word_OR(vector A,vector B); 31

32//两个字X和Y的逻辑"异或"

33 vector word_XOR(vector A,vector B); 34

35//两个字X和Y的逻辑"补"

36 vector word_COMPLEMENT(vector A);

37

38//两个字X和Y的摸2^32整数加

39 vector word_ADD(vector A,vector B); 40

41//将字X循环左移s个位置

42 vector ROTL(vector A,int s);

43

44//SHA-1的填充方案,我们设定msg由ASCII码组成

45 vector> SHA_1_PAD(string msg);

46

47//将SHA-1压成以字为单位

48 vector>> compress(vector> result);

49

50//定义ft函数,每个ft函数都有B,C,D三个字作为输入,并产生一个字作为输出

51 vector Ft(int t,vector B,vector C,vector

D);

52

53//定义字常数K

54 vector K(int t);

55

56//开始进行SHA-1(安全Hash算法)的加密

57 vector> SHA_1(string msg);

58

59 };

60

61//将vector转化为string字符串形式

62string SHA1::num_into_message(vector A)

63 {

64int i;

65string msg = "";

66for(i = 0;i < A.size();i++)

67 {

68if(A[i] >= 0&& A[i] <= 9)

69 msg += '0' + A[i];

70elseif(A[i] >= 10&& A[i] <= 15)

71 msg += 'A' + (A[i] - 10);

72 }

73return msg;

74 }

75

76//将一个字符串形式的字转化为vector数组

77 vector SHA1::hex_into_dec(string word)

78 {

79int i;

80 vector result(NUM,0);

81for(i = 0;i < NUM;i++)

82 {

83if(word[i] >= '0'&& word[i] <= '9')

84 {

85 result[i] = word[i] - '0';

86 }

87elseif(word[i] >= 'A'&& word[i] <= 'F')

88 {

89 result[i] = 10 + word[i] - 'A';

90 }

91 }

92return result;

93 }

94

95//两个字X和Y的逻辑"和"

96 vector SHA1::word_AND(vector A,vector B)

97 {

98 vector result(NUM,0);

99int i;

100for(i = 0;i < NUM;i++)

101 {

102 result[i] = A[i] & B[i];

103 }

104return result;

105 }

106

107//两个字X和Y的逻辑"或"

108 vector SHA1::word_OR(vector A,vector B) 109 {

110 vector result(NUM,0);

111int i;

112for(i = 0;i < NUM;i++)

113 {

114 result[i] = A[i] | B[i];

115 }

116return result;

117 }

118

119//两个字X和Y的逻辑"异或"

120 vector SHA1::word_XOR(vector A,vector B) 121 {

122 vector result(NUM,0);

123int i;

124for(i = 0;i < NUM;i++)

125 {

相关文档
最新文档