SHA哈希算法.zip

  • boommmme
    了解作者
  • C/C++
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2019-04-26 18:35
    上传日期
sha哈希算法的实现,安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高
SHA哈希算法.zip
  • SHA哈希算法.cpp
    12.4KB
内容介绍
#include<iostream> #include<string> #include<vector> #include<cmath> #include<stack> using namespace std; #define NUM 8 //一个字等价于8个16进制数 #define HEX 16 //16进制 #define BIT 512 //消息认证码512 bite一组 class SHA_1{ public: //辅助函数 char hexConvert(int a, int b, int c, int d); //把一个四位二进制串转为一个十六进制字符 string binaryConvert(char a); //把一个十六进制字符转为四位二进制串 vector<int> sysConvert(const unsigned long long &a, int sys, int length); //把整数a转换为长度为length的sys进制向量形式 vector<int> char_to_hex(const string &word); //十六进制符号串(字)转十六进制整数串 string hex_to_char(const vector<int> &a); //十六进制整数串转十六进制符号串 string char_to_binary(const char a); //字符转八位二进制串 //运算函数 string w_AND(const string &a, const string &b); //字,与操作 string w_OR(const string &a, const string &b); //字,或操作 string w_XOR(const string &a, const string &b); //字,异或 string w_CPL(const string &a); //字,补 string w_ADD(const string &a, const string &b); //字,模2^32整数加 string ROTL(const string &a, int s); //a循环左移s个位置(0<= s <=31),a不改变 string Ft(int t, const string &B, const string &C, const string &D); string K(int t); //字常数K //主要操作函数 vector<vector<int> > SHA_1_PAD(const string &b_msg); //填充函数,输入为消息的二进制串 vector<vector<string> > divide(const vector<vector<int> > &result); //将填充后的消息分成以字(八个十六进制数)为单位的串联 string result_SHA_1(const string &msg); //获得消息摘要 private: string H0 = "67452301"; string H1 = "EFCDAB89"; string H2 = "98BADCFE"; string H3 = "10325476"; string H4 = "C3D2E1F0"; }; //辅助函数 char SHA_1::hexConvert(int a, int b, int c, int d){ //把一个四位二进制串转为一个十六进制字符 if(a == 0 && b == 0 && c == 0 && d == 0) return '0'; else if(a == 0 && b == 0 && c == 0 && d == 1) return '1'; else if(a == 0 && b == 0 && c == 1 && d == 0) return '2'; else if(a == 0 && b == 0 && c == 1 && d == 1) return '3'; else if(a == 0 && b == 1 && c == 0 && d == 0) return '4'; else if(a == 0 && b == 1 && c == 0 && d == 1) return '5'; else if(a == 0 && b == 1 && c == 1 && d == 0) return '6'; else if(a == 0 && b == 1 && c == 1 && d == 1) return '7'; else if(a == 1 && b == 0 && c == 0 && d == 0) return '8'; else if(a == 1 && b == 0 && c == 0 && d == 1) return '9'; else if(a == 1 && b == 0 && c == 1 && d == 0) return 'A'; else if(a == 1 && b == 0 && c == 1 && d == 1) return 'B'; else if(a == 1 && b == 1 && c == 0 && d == 0) return 'C'; else if(a == 1 && b == 1 && c == 0 && d == 1) return 'D'; else if(a == 1 && b == 1 && c == 1 && d == 0) return 'E'; else if(a == 1 && b == 1 && c == 1 && d == 1) return 'F'; } string SHA_1::binaryConvert(char a){ //把一个十六进制字符转为四位二进制string if(a == '0') return "0000"; else if(a == '1') return "0001"; else if(a == '2') return "0010"; else if(a == '3') return "0011"; else if(a == '4') return "0100"; else if(a == '5') return "0101"; else if(a == '6') return "0110"; else if(a == '7') return "0111"; else if(a == '8') return "1000"; else if(a == '9') return "1001"; else if(a == 'A') return "1010"; else if(a == 'B') return "1011"; else if(a == 'C') return "1100"; else if(a == 'D') return "1101"; else if(a == 'E') return "1110"; else if(a == 'F') return "1111"; } vector<int> SHA_1::sysConvert(const unsigned long long &a, int sys, int length){ //把整数a转换为长度为length的sys进制向量形式 vector<int> result; stack<int> tmp; unsigned long long a1 = a; do{ int temp = a1 % sys; tmp.push(temp); a1 /= sys; }while(a1 != 0); for(int i = 0; i < length - tmp.size(); i++) //填充0 result.push_back(0); while(!tmp.empty()){ result.push_back(tmp.top()); tmp.pop(); } return result; } vector<int> SHA_1::char_to_hex(const string &word){ //十六进制符号串(字)转十六进制整数串 vector<int> result(NUM, 0); for(int i = 0; i < NUM; i++){ if(word[i] >= '0' && word[i] <= '9') result[i] = word[i] - '0'; else if(word[i] >= 'A' && word[i] <= 'Z') result[i] = 10 + word[i] - 'A'; } return result; } string SHA_1::hex_to_char(const vector<int> &a){ //十六进制整数串转十六进制符号串 string result; for(int i = 0; i < NUM; i++){ if(a[i] >= 0 && a[i] <= 9) result += a[i] + '0'; else if(a[i] >= 10 && a[i] <= 15) result += a[i] - 10 + 'A'; } return result; } string SHA_1::char_to_binary(const char a){ //字符转八位二进制串 int a_int; if(a >= '0' && a <= '9') a_int = a - '0' + 48; else if(a >= 'A' && a <= 'Z') a_int = a - 'A' + 65; else if(a >= 'a' && a <= 'z') a_int = a - 'a' + 97; vector<int> temp = sysConvert(a_int, 2, 8); string result; for(int i = 0; i < temp.size(); i++) result += temp[i] + '0'; return result; } //运算函数 string SHA_1::w_AND(const string &a, const string &b) { //字,与操作 vector<int> a_int = char_to_hex(a); vector<int> b_int = char_to_hex(b); vector<int> r_int(NUM, 0); for(int i = 0; i < NUM; i++) r_int[i] = a_int[i] & b_int[i]; return hex_to_char(r_int); } string SHA_1::w_OR(const string &a, const string &b){ //字,或操作 vector<int> a_int = char_to_hex(a); vector<int> b_int = char_to_hex(b); vector<int> r_int(NUM, 0); for(int i = 0; i < NUM; i++) r_int[i] = a_int[i] | b_int[i]; return hex_to_char(r_int); } string SHA_1::w_XOR(const string &a, const string &b){ //字,异或 vector<int> a_int = char_to_hex(a); vector<int> b_int = char_to_hex(b); vector<int> r_int(NUM, 0); for(int i = 0; i < NUM; i++) r_int[i] = a_int[i] ^ b_int[i]; return hex_to_char(r_int); } string SHA_1::w_CPL(const string &a){ //字,补 vector<int> a_int = char_to_hex(a); vector<int> r_int(NUM, 0); for(int i = 0; i < NUM; i++) r_int[i] = HEX - 1 - a_int[i]; return hex_to_char(r_int); } string SHA_1::w_ADD(const string &a, const string &b){ //字,模2^32整数加 vector<int> A = char_to_hex(a); vector<int> B = char_to_hex(b); vector<int> Result(NUM, 0); int sign = 0; for(int i = NUM - 1; i >= 0; i--){ Result[i] = A[i] + B[i] + sign; sign = Result[i] / HEX; Result[i] %= HEX; } return hex_to_char(Result); } string SHA_1::ROTL(const string &a, int s){ //a循环左移s个位置(0<= s <=31) vector<int> A = char_to_hex(a); unsigned long a_int = 0; //字的整数值 for(int i = 0; i < NUM; i++) a_int += A[NUM - 1 - i] * pow(HEX, i); a_int = (a_int >> (NUM * 4 - s)) | (a_int << s); //循环左移s位 vector<int> A1 = sysConvert(a_int, HEX, NUM); return hex_to_char(A1); } string SHA_1::Ft(int t, const string &B, const string &C, const string &D){//迭代压缩函数 if(t >= 0 && t <= 19) return w_OR(w_AND(B, C), w_AND(w_CPL(B), D)); else if(t >= 20 && t <= 39) return w_XOR(w_XOR(B, C), D); else if(t >= 40 && t <= 59) return w_OR(w_OR(w_AND(B, C), w_AND(B, D)), w_AND(C, D)); else if(t >= 60 && t <= 79) retur
评论
    相关推荐
    • sha512.rar
      sha512算法的C程序,程序结果正确!
    • SHA256.rar
      密码算法SHA256的标准描述。。。。。。。。。。。。
    • sha256.rar
      s加密sghshrova;kfdngvajkrgal
    • sha256-noBLOCKCHAIN
      sha256-noBlockchain 只是想比较散列,不是真正的区块链,而只是一个概念。 原始块“ A至B 200个硬币,B至C 100个硬币,C至D 50个硬币,D至A 25个硬币” “ D到E 200硬币,E到F 100硬币,F到G 50硬币,G到D 25硬币”...
    • HMAC SHA 算法
      HMAC SHA 算法 C++的实现 上传代码分享 高效率实现 #include "HMAC_SHA1.h" BYTE Key[20] ; BYTE digest[20] ; unsigned char *test = "Hi There" ; memset(Key, 0x0b, 20) ; CHMAC_SHA1 HMAC_SHA1 ; HMAC_SHA1...
    • SHA加密算法
      SHA加密解密系统学习!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    • sha256-animation-master.zip
      SHA 256 master sourcecode
    • SHA.zip
      SHA算法的Java基本实现,可以实现SHA算法。
    • SHA.rar
      SHA加密算法JAVA语言实现,亲测可用
    • 3DES加密算法源代码.rar
      DES加密源代码,用3DES加密算法。 加密强度高,到目前为止,还无人能够破解!