PHP,C++ 通用加解密,需要md5,base64 支持
来源:互联网 发布:如何学好c语言 编辑:程序博客网 时间:2024/06/14 16:14
PHP,C++ 通用加解密,需要md5,base64 支持
时间过太久,代码从哪里下载的往了,不过我自己做过修改,其中C++ 可能包含部分 C++11 的库函数,编译不过的话,移除即可
个人觉得 base64 大家可以想法子把它美化一下
PHP
<?php//md5 函数使用小写/*** 可逆的字符串加密函数* @param int $txtStream 待加密的字符串内容* @param int $password 加密密码* @return string 加密后的字符串*/function enCrypt($txtStream,$password){ //密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_, $lockstream = 'GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456'; //随机找一个数字,并从密锁串中找到一个密锁值 $lockLen = strlen($lockstream); $lockCount = rand(0,$lockLen-1); $randomLock = $lockstream[$lockCount]; //结合随机密锁值生成MD5后的密码 $password = md5($password.$randomLock); //开始对字符串加密 $txtStream = base64_encode($txtStream); $tmpStream = ''; $i=0;$j=0;$k = 0; for ($i=0; $i<strlen($txtStream); $i++) { $k = ($k == strlen($password)) ? 0 : $k; $j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen); $tmpStream .= $lockstream[$j]; $k++; } return $tmpStream.$randomLock; } /*** 可逆的字符串解密函数* @param int $txtStream 待加密的字符串内容* @param int $password 解密密码* @return string 解密后的字符串*/function deCrypt($txtStream,$password){ //密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_, $lockstream = 'GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456'; $lockLen = strlen($lockstream); //获得字符串长度 $txtLen = strlen($txtStream); //截取随机密锁值 $randomLock = $txtStream[$txtLen - 1]; //获得随机密码值的位置 $lockCount = strpos($lockstream,$randomLock); //结合随机密锁值生成MD5后的密码 $password = md5($password.$randomLock); //开始对字符串解密 $txtStream = substr($txtStream,0,$txtLen-1); $tmpStream = ''; $i=0;$j=0;$k = 0; for($i=0; $i<strlen($txtStream); $i++){ $k = ($k == strlen($password)) ? 0 : $k; $j = strpos($lockstream,$txtStream[$i]) - $lockCount - ord($password[$k]); while($j < 0){ $j = $j + ($lockLen); } $tmpStream .= $lockstream[$j]; $k++; } return base64_decode($tmpStream); } echo enCrypt("3","123456789");?>
C++
//与 PHP 通用加解密std::string phpEnCode(std::string& word, std::string& pass){std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";int lock_len = lock_stream.length();srand((unsigned int)time(NULL));int lock_num = rand() % lock_len;char random = lock_stream[lock_num];pass += random;pass = MD5(pass).toString();word = base64_encode(word);std::string res = "";int j = 0, k = 0;for (int i = 0; i< (int)word.length(); ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = (lock_stream.find(word[i]) + lock_num + (int)y) % lock_len;res += lock_stream[j];k++;}res += random;return std::move(res);}std::string phpDnCode(std::string& word, std::string& pass){std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";int lock_len = lock_stream.length();char random = word[word.length() - 1];int lock_num = (int)lock_stream.find(random);pass += random;pass = MD5(pass).toString();std::string res = "";int j = 0, k = 0;for (int i = 0; i < (int)word.length() - 1; ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = lock_stream.find(word[i]) - (int)y - lock_num;while (j < 0) j += lock_len;res += lock_stream[j];k++;}res = base64_decode(res);/*size_t nnn = res.find('\001');if (nnn != std::string::npos) res = res.substr(0, nnn);*/return std::move(res);}
cmd5.h
/**兼容网页版 MD5 的 C++ 加密*用法:* 1.字符串加密:* #include <string>* string cc = "Login:aa|asdaf";* cout << MD5(cc).toString() << endl; * 2.文件加密使用函数: * cout << FileDigest("D:\\key.txt") << endl; *另附一个最简单的,在原位置逐一异或加解密函数* void EnCode(char* source, char* pass)*/#ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Type define */ typedef unsigned char byte; typedef unsigned long ulong; using std::string; using std::ifstream; /* MD5 declaration. */ class MD5 { public: MD5(); MD5(const void *input, size_t length); MD5(const string &str); MD5(ifstream &in); void update(const void *input, size_t length); void update(const string &str); void update(ifstream &in); const byte* digest(); string toString(); void reset(); private: void update(const byte *input, size_t length); void final(); void transform(const byte block[64]); void encode(const ulong *input, byte *output, size_t length); void decode(const byte *input, ulong *output, size_t length); string bytesToHexString(const byte *input, size_t length); /* class uncopyable */ MD5(const MD5&); //MD5& operator=(const MD5& m);private: ulong _state[4]; /* state (ABCD) */ ulong _count[2]; /* number of bits, modulo 2^64 (low-order word first) */ byte _buffer[64]; /* input buffer */ byte _digest[16]; /* message digest */ bool _finished; /* calculate finished ? */ static const byte PADDING[64]; /* padding for calculate */ static const char HEX[16]; static const size_t BUFFER_SIZE = 1024; };void EnCode(char* source, char* pass);string FileDigest(const string &file);#endif/*MD5_H*/
cmd5.cpp
#include "CMD5.h" using namespace std; //文件 MD5 加密string FileDigest(const string &file) { ifstream in(file.c_str(), ios::binary); if (!in) return ""; MD5 md5; std::streamsize length; char buffer[1024]; while (!in.eof()) { in.read(buffer, 1024); length = in.gcount(); if (length > 0) md5.update(buffer, (size_t)length); } in.close(); return md5.toString(); } //在 char 原来的位置上进行异或加解密,使用同一个函数//最简单的加密void EnCode(char* source, char* pass){ int source_length = strlen(source); int pass_length = strlen(pass);char tmp[1]={0}; for(int i = 0; i < source_length; ++i) { tmp[0] = source[i]^pass[i%pass_length]; if(tmp[0] == 0) // 要考虑到XOR等于0的情况,如果等于0,就相当 { // 于字符串就提前结束了, 这是不可以的。 tmp[0] = source[i]; // 因此tmp_str[i]等于0的时候,保持原文不变 }source[i] = tmp[0]; } source[source_length] = 0; return ;} /* Constants for MD5Transform routine. */ #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 /* F, G, H and I are basic MD5 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. */ #define FF(a, b, c, d, x, s, ac) { (a) += F ((b), (c), (d)) + (x) + ac; (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define GG(a, b, c, d, x, s, ac) { (a) += G ((b), (c), (d)) + (x) + ac; (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define HH(a, b, c, d, x, s, ac) { (a) += H ((b), (c), (d)) + (x) + ac; (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define II(a, b, c, d, x, s, ac) { (a) += I ((b), (c), (d)) + (x) + ac; (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } const byte MD5::PADDING[64] = { 0x80 }; const char MD5::HEX[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /* Default construct. */ MD5::MD5() { reset(); } /* Construct a MD5 object with a input buffer. */ MD5::MD5(const void *input, size_t length) { reset(); update(input, length); } /* Construct a MD5 object with a string. */ MD5::MD5(const string &str) { reset(); update(str); } /* Construct a MD5 object with a file. */ MD5::MD5(ifstream &in) { reset(); update(in); } /* Return the message-digest */ const byte* MD5::digest() { if (!_finished) { _finished = true; final(); } return _digest; } /* Reset the calculate state */ void MD5::reset() { _finished = false; /* reset number of bits. */ _count[0] = _count[1] = 0; /* Load magic initialization constants. */ _state[0] = 0x67452301; _state[1] = 0xefcdab89; _state[2] = 0x98badcfe; _state[3] = 0x10325476; } /* Updating the context with a input buffer. */ void MD5::update(const void *input, size_t length) { update((const byte*)input, length); } /* Updating the context with a string. */ void MD5::update(const string &str) { update((const byte*)str.c_str(), str.length()); } /* Updating the context with a file. */ void MD5::update(ifstream &in) { if (!in) return; std::streamsize length; char buffer[BUFFER_SIZE]; while (!in.eof()) { in.read(buffer, BUFFER_SIZE); length = in.gcount(); if (length > 0) update(buffer, (size_t)length); } in.close(); } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ void MD5::update(const byte *input, size_t length) { ulong i, index, partLen; _finished = false; /* Compute number of bytes mod 64 */ index = (ulong)((_count[0] >> 3) & 0x3f); /* update number of bits */ if((_count[0] += ((ulong)length << 3)) < ((ulong)length << 3)) _count[1]++; _count[1] += ((ulong)length >> 29); partLen = 64 - index; /* transform as many times as possible. */ if(length >= partLen) { memcpy(&_buffer[index], input, partLen); transform(_buffer); for (i = partLen; i + 63 < length; i += 64) transform(&input[i]); index = 0; } else { i = 0; } /* Buffer remaining input */ memcpy(&_buffer[index], &input[i], length-i); } /* MD5 finalization. Ends an MD5 message-_digest operation, writing the the message _digest and zeroizing the context. */ void MD5::final() { byte bits[8]; ulong oldState[4]; ulong oldCount[2]; ulong index, padLen; /* Save current state and count. */ memcpy(oldState, _state, 16); memcpy(oldCount, _count, 8); /* Save number of bits */ encode(_count, bits, 8); /* Pad out to 56 mod 64. */ index = (ulong)((_count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); update(PADDING, padLen); /* Append length (before padding) */ update(bits, 8); /* Store state in digest */ encode(_state, _digest, 16); /* Restore current state and count. */ memcpy(_state, oldState, 16); memcpy(_count, oldCount, 8); } /* MD5 basic transformation. Transforms _state based on block. */ void MD5::transform(const byte block[64]) { ulong a = _state[0], b = _state[1], c = _state[2], d = _state[3], x[16]; decode(block, x, 64); /* Round 1 */ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ _state[0] += a; _state[1] += b; _state[2] += c; _state[3] += d; } /* Encodes input (ulong) into output (byte). Assumes length is a multiple of 4. */ void MD5::encode(const ulong *input, byte *output, size_t length) { for(size_t i=0, j=0; j<length; i++, j+=4) { output[j]= (byte)(input[i] & 0xff); output[j+1] = (byte)((input[i] >> 8) & 0xff); output[j+2] = (byte)((input[i] >> 16) & 0xff); output[j+3] = (byte)((input[i] >> 24) & 0xff); } } /* Decodes input (byte) into output (ulong). Assumes length is a multiple of 4. */ void MD5::decode(const byte *input, ulong *output, size_t length) { for(size_t i=0, j=0; j<length; i++, j+=4) { output[i] = ((ulong)input[j]) | (((ulong)input[j+1]) << 8) | (((ulong)input[j+2]) << 16) | (((ulong)input[j+3]) << 24); } } /* Convert byte array to hex string. */ string MD5::bytesToHexString(const byte *input, size_t length) { string str; str.reserve(length << 1); for(size_t i = 0; i < length; i++) { int t = input[i]; int a = t / 16; int b = t % 16; str.append(1, HEX[a]); str.append(1, HEX[b]); } return std::move(str); } /* Convert digest to string value */ string MD5::toString() { return bytesToHexString(digest(), 16); }
base64.h
#ifndef _BASE64_H_ #define _BASE64_H_ #include <stdlib.h> /* srand, rand */#include <time.h> /* time */#include <string>const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";/* Base64 编码 */char* base64_encode(const char* data, int data_len);std::string base64_encode(std::string&);/* Base64 解码 */char *base64_decode(const char* data, int data_len);std::string base64_decode(std::string&);std::string enCode(std::string& , std::string& );std::string deCode(std::string& , std::string& );std::string phpEnCode(std::string&, std::string&);std::string phpDnCode(std::string&, std::string&);#endif
base64.cpp
#include "base64.h"#include "CMD5.h"/* Base64 编码 */char *base64_encode(const char* data, int data_len){//int data_len = strlen(data); int prepare = 0;int ret_len;int temp = 0;char *ret = NULL;char *f = NULL;int tmp = 0;char changed[4];int i = 0;ret_len = data_len / 3;temp = data_len % 3;if (temp > 0){ret_len += 1;}ret_len = ret_len * 4 + 1;ret = (char *)malloc(ret_len);if (ret == NULL){printf("No enough memory.\n");return 0;}memset(ret, 0, ret_len);f = ret;while (tmp < data_len){temp = 0;prepare = 0;memset(changed, '\0', 4);while (temp < 3){//printf("tmp = %d\n", tmp); if (tmp >= data_len){break;}prepare = ((prepare << 8) | (data[tmp] & 0xFF));tmp++;temp++;}prepare = (prepare << ((3 - temp) * 8));//printf("before for : temp = %d, prepare = %d\n", temp, prepare); for (i = 0; i < 4; i++){if (temp < i){changed[i] = 0x40;}else{changed[i] = (prepare >> ((3 - i) * 6)) & 0x3F;}*f = base[changed[i]];//printf("%.2X", changed[i]); f++;}}*f = '\0';return ret;}/* 转换算子 */static char find_pos(char ch){char *ptr = (char*)strrchr(base, ch);//the last position (the only) in base[] return (ptr - base);}/* Base64 解码 */char *base64_decode(const char *data, int data_len){int ret_len = (data_len / 4) * 3;int equal_count = 0;char *ret = NULL;char *f = NULL;int tmp = 0;int temp = 0;int prepare = 0;int i = 0;if (*(data + data_len - 1) == '='){equal_count += 1;}if (*(data + data_len - 2) == '='){equal_count += 1;}if (*(data + data_len - 3) == '='){//seems impossible equal_count += 1;}switch (equal_count){case 0:ret_len += 4;//3 + 1 [1 for NULL] break;case 1:ret_len += 4;//Ceil((6*3)/8)+1 break;case 2:ret_len += 3;//Ceil((6*2)/8)+1 break;case 3:ret_len += 2;//Ceil((6*1)/8)+1 break;}ret = (char *)malloc(ret_len);if (ret == NULL){printf("No enough memory.\n");return 0;}memset(ret, 0, ret_len);f = ret;while (tmp < (data_len - equal_count)){temp = 0;prepare = 0;while (temp < 4){if (tmp >= (data_len - equal_count)){break;}prepare = (prepare << 6) | (find_pos(data[tmp]));temp++;tmp++;}prepare = prepare << ((4 - temp) * 6);for (i = 0; i<3; i++){if (i == temp){break;}*f = (char)((prepare >> ((2 - i) * 8)) & 0xFF);f++;}}*f = '\0';return ret;}std::string base64_encode(std::string& st){return std::move(std::string(base64_encode(st.c_str(), st.length())));}std::string base64_decode(std::string& st){return std::move(std::string(base64_decode(st.c_str(), st.length())));}//函数两个参数会被改变std::string enCode(std::string& word, std::string& pass){for (int len_org = word.length(); len_org < 24; ++len_org)word += '\001';std::string lock_stream = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";int lock_len = lock_stream.length();srand((unsigned int)time(NULL));int lock_num = rand() % lock_len;char random = lock_stream[lock_num];pass += random;pass = base64_encode(pass);word = base64_encode(word);std::string res = "";int j = 0, k = 0;for (int i = 0; i< (int)word.length(); ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = (lock_stream.find(word[i]) + lock_num + (int)y) % lock_len;res += lock_stream[j];k++;}res += random;return std::move(res);}std::string deCode(std::string& word, std::string& pass){std::string lock_stream = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";int lock_len = lock_stream.length();char random = word[word.length() - 1];int lock_num = (int)lock_stream.find(random);pass += random;pass = base64_encode(pass);std::string res = "";int j = 0, k = 0;for (int i = 0; i < (int)word.length() - 1; ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = lock_stream.find(word[i]) - (int)y - lock_num;while (j < 0) j += lock_len;char x = lock_stream[j];k++;res += x;}res = base64_decode(res);size_t nnn = res.find('\001');if (nnn != std::string::npos) res = res.substr(0, nnn);return std::move(res);}//与 PHP 通用加解密std::string phpEnCode(std::string& word, std::string& pass){std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";int lock_len = lock_stream.length();srand((unsigned int)time(NULL));int lock_num = rand() % lock_len;char random = lock_stream[lock_num];pass += random;pass = MD5(pass).toString();word = base64_encode(word);std::string res = "";int j = 0, k = 0;for (int i = 0; i< (int)word.length(); ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = (lock_stream.find(word[i]) + lock_num + (int)y) % lock_len;res += lock_stream[j];k++;}res += random;return std::move(res);}std::string phpDnCode(std::string& word, std::string& pass){std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";int lock_len = lock_stream.length();char random = word[word.length() - 1];int lock_num = (int)lock_stream.find(random);pass += random;pass = MD5(pass).toString();std::string res = "";int j = 0, k = 0;for (int i = 0; i < (int)word.length() - 1; ++i){k = (k == pass.length()) ? 0 : k;char y = pass[k];j = lock_stream.find(word[i]) - (int)y - lock_num;while (j < 0) j += lock_len;res += lock_stream[j];k++;}res = base64_decode(res);/*size_t nnn = res.find('\001');if (nnn != std::string::npos) res = res.substr(0, nnn);*/return std::move(res);}
0 0
- PHP,C++ 通用加解密,需要md5,base64 支持
- c base64加解密
- MD5.SHA.BASE64算法加解密
- Base64 加解密c/c++
- Base64 加解密c/c++
- android中的MD5、Base64、DES/3DES/ADES加解密
- java中 Base64,MD5,DES,RSA 加解密
- PHP与C#通用 DES 加解密
- base64加解密
- Base64加解密详解
- base64加解密
- Base64 加解密
- Base64加解密
- base64加解密
- base64加解密
- Base64加解密方法
- CTF-base64加解密
- BASE64加解密
- OpenStack L版官网配置转载(五)
- 线性回归
- sparkSQL1.1入门之九:sparkSQL之调优
- 机器学习与数据挖掘之生成模型与判别模型
- jQuery datatable获取当前页面,刷新时保存在当前页面
- PHP,C++ 通用加解密,需要md5,base64 支持
- GreenDao 3.2.0使用教程
- @Controller 和@RestController 的区别
- Eclipse错误:找不到或无法加载主类 解决办法
- Spring MVC数据绑定400错误
- android-partition分析
- QT学习之设置界面风格
- 安装xdebug时发现的一些问题
- Python标准库——collections模块的Counter类