青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數(shù)據(jù)加載中……

SHA256 算法c++11 實現(xiàn)

SHA256 算法c++11 實現(xiàn)
  1 #ifndef SHA256_HPP
  2 #define SHA256_HPP
  3 
  4 
  5 #include <vector>
  6 #include <array>
  7 #include <algorithm>
  8 
  9 
 10 
 11 class Sha256{
 12 public:
 13     Sha256(): len{0}, buf{0}, bits{0},
 14         key {
 15              0x428a2f98UL0x71374491UL0xb5c0fbcfUL0xe9b5dba5UL0x3956c25bUL,
 16              0x59f111f1UL0x923f82a4UL0xab1c5ed5UL0xd807aa98UL0x12835b01UL,
 17              0x243185beUL0x550c7dc3UL0x72be5d74UL0x80deb1feUL0x9bdc06a7UL,
 18              0xc19bf174UL0xe49b69c1UL0xefbe4786UL0x0fc19dc6UL0x240ca1ccUL,
 19              0x2de92c6fUL0x4a7484aaUL0x5cb0a9dcUL0x76f988daUL0x983e5152UL,
 20              0xa831c66dUL0xb00327c8UL0xbf597fc7UL0xc6e00bf3UL0xd5a79147UL,
 21              0x06ca6351UL0x14292967UL0x27b70a85UL0x2e1b2138UL0x4d2c6dfcUL,
 22              0x53380d13UL0x650a7354UL0x766a0abbUL0x81c2c92eUL0x92722c85UL,
 23              0xa2bfe8a1UL0xa81a664bUL0xc24b8b70UL0xc76c51a3UL0xd192e819UL,
 24              0xd6990624UL0xf40e3585UL0x106aa070UL0x19a4c116UL0x1e376c08UL,
 25              0x2748774cUL0x34b0bcb5UL0x391c0cb3UL0x4ed8aa4aUL0x5b9cca4fUL,
 26              0x682e6ff3UL0x748f82eeUL0x78a5636fUL0x84c87814UL0x8cc70208UL,
 27              0x90befffaUL0xa4506cebUL0xbef9a3f7UL0xc67178f2UL },
 28         hash {0}
 29     {
 30     }
 31 
 32 
 33 public:
 34     void sha256(const std::vector<unsigned char> &data, std::array<unsigned char32>& out){
 35         init();
 36         update(data);
 37         done(out);
 38     }
 39 
 40 
 41 private:
 42     void init() {
 43         len     = 0;
 44         bits[0= bits[1= 0;
 45         hash[0= 0x6a09e667;
 46         hash[1= 0xbb67ae85;
 47         hash[2= 0x3c6ef372;
 48         hash[3= 0xa54ff53a;
 49         hash[4= 0x510e527f;
 50         hash[5= 0x9b05688c;
 51         hash[6= 0x1f83d9ab;
 52         hash[7= 0x5be0cd19;
 53     }
 54 
 55     void _hash(const std::array<unsigned int64>& key){
 56         unsigned a, b, c, d, e, f, g, h, i;
 57         unsigned t[2];
 58         unsigned W[64];
 59 
 60         a = hash[0];
 61         b = hash[1];
 62         c = hash[2];
 63         d = hash[3];
 64         e = hash[4];
 65         f = hash[5];
 66         g = hash[6];
 67         h = hash[7];
 68 
 69         for (i = 0; i < 64; i++) {
 70             if ( i < 16 )
 71                 W[i] = _word(this->buf, _shw(i, 2));
 72             else
 73                 W[i] = _G1(W[i - 2]) + W[i - 7+ _G0(W[i - 15]) + W[i - 16];
 74 
 75             t[0= h + _S1(e) + _Ch(e, f, g) + key[i] + W[i];
 76             t[1= _S0(a) + _Ma(a, b, c);
 77             h = g;
 78             g = f;
 79             f = e;
 80             e = d + t[0];
 81             d = c;
 82             c = b;
 83             b = a;
 84             a = t[0+ t[1];
 85         }
 86 
 87         hash[0+= a;
 88         hash[1+= b;
 89         hash[2+= c;
 90         hash[3+= d;
 91         hash[4+= e;
 92         hash[5+= f;
 93         hash[6+= g;
 94         hash[7+= h;
 95     }
 96 
 97     void update(const std::vector<unsigned char>& data){
 98         for(size_t i = 0; i < data.size(); i++){
 99             buf[len] = data[i];
100             len++;
101             if(len == buf.size()){
102                 _hash(this->key);
103                 _addbits(bits, buf.size() * 8);
104                 len = 0;
105             }
106         }
107     }
108 
109     void done(std::array<unsigned char32>& out){
110         unsigned int i, j;
111         j = len % buf.size();
112         buf[j] = 0x80;
113         std::fill(buf.begin() + j + 1, buf.end(), 0x00);
114 
115         if(len > 55){
116             _hash(this->key);
117             std::fill_n(buf.begin(), buf.size(), 0x00);
118         }
119 
120         _addbits(bits, len * 8);
121         buf[63= _shb(bits[0],  0);
122         buf[62= _shb(bits[0],  8);
123         buf[61= _shb(bits[0], 16);
124         buf[60= _shb(bits[0], 24);
125         buf[59= _shb(bits[1],  0);
126         buf[58= _shb(bits[1],  8);
127         buf[57= _shb(bits[1], 16);
128         buf[56= _shb(bits[1], 24);
129         _hash(this->key);
130 
131         for (i = 0, j = 24; i < 4; i++, j -= 8) {
132             out[i     ] = _shb(hash[0], j);
133             out[i +  4= _shb(hash[1], j);
134             out[i +  8= _shb(hash[2], j);
135             out[i + 12= _shb(hash[3], j);
136             out[i + 16= _shb(hash[4], j);
137             out[i + 20= _shb(hash[5], j);
138             out[i + 24= _shb(hash[6], j);
139             out[i + 28= _shb(hash[7], j);
140         }
141     }
142 
143 private:
144 
145     /* -------------------------------------------------------------------------- */
146     inline uint8_t _shb(uint32_t x, uint32_t n) {
147         return ( (x >> (n & 31)) & 0xff );
148     } /* _shb */
149 
150     /* -------------------------------------------------------------------------- */
151     inline uint32_t _shw(uint32_t x, uint32_t n) {
152         return ( (x << (n & 31)) & 0xffffffff );
153     } /* _shw */
154 
155     /* -------------------------------------------------------------------------- */
156     inline uint32_t _r(uint32_t x, uint8_t n) {
157         return ( (x >> n) | _shw(x, 32 - n) );
158     } /* _r */
159 
160     /* -------------------------------------------------------------------------- */
161     inline uint32_t _Ch(uint32_t x, uint32_t y, uint32_t z)
162     {
163         return ( (x & y) ^ ((~x) & z) );
164     } /* _Ch */
165 
166     /* -------------------------------------------------------------------------- */
167     inline uint32_t _Ma(uint32_t x, uint32_t y, uint32_t z)
168     {
169         return ( (x & y) ^ (x & z) ^ (y & z) );
170     } /* _Ma */
171 
172     /* -------------------------------------------------------------------------- */
173     inline uint32_t _S0(uint32_t x) {
174         return ( _r(x, 2^ _r(x, 13^ _r(x, 22) );
175     } /* _S0 */
176 
177     /* -------------------------------------------------------------------------- */
178     inline uint32_t _S1(uint32_t x) {
179         return ( _r(x, 6^ _r(x, 11^ _r(x, 25) );
180     } /* _S1 */
181 
182     /* -------------------------------------------------------------------------- */
183     inline uint32_t _G0(uint32_t x) {
184         return ( _r(x, 7^ _r(x, 18^ (x >> 3) );
185     } /* _G0 */
186 
187     /* -------------------------------------------------------------------------- */
188     uint32_t _G1(uint32_t x) {
189         return ( _r(x, 17^ _r(x, 19^ (x >> 10) );
190     } /* _G1 */
191 
192     /* -------------------------------------------------------------------------- */
193     uint32_t _word(std::array<unsigned char64>& data, const int & pos ) {
194         return ( _shw(data[pos + 0], 24| _shw(data[pos + 1], 16)
195                 | _shw(data[ pos + 2], 8| (data[pos + 3]) );
196     } /* _word */
197 
198     /* -------------------------------------------------------------------------- */
199     void _addbits(std::array<unsigned int2>& bits, uint32_t n) {
200         if ( bits[0> (0xffffffff - n) )
201             bits[1= (bits[1+ 1& 0xFFFFFFFF;
202         bits[0= (bits[0+ n) & 0xFFFFFFFF;
203     } /* _addbits */
204 
205 
206 
207 private:
208     size_t len;
209     std::array<unsigned char64> buf;
210     std::array<unsigned int2> bits;
211     const std::array<unsigned int64> key;
212     std::array<unsigned int8> hash;
213 
214 };
215 
216 #endif
217 



調(diào)用方式, QT為例
    QString qSource = ui->leSource->text();
        QByteArray qSourceBytes 
= qSource.toUtf8();
        std::vector
<unsigned char> sourceBytes(qSourceBytes.size());
        std::copy_n(qSourceBytes.begin(), qSourceBytes.size(), sourceBytes.begin());

        Sha256 sha246;
        std::array
<unsigned char32> out;
        sha246.sha256(sourceBytes, 
out);

        QByteArray qSha256Bytes(
out.size(), 0);
        std::copy_n(
out.begin(), out.size(), qSha256Bytes.begin());
        qDebug() 
<< TIMESTAMP << "source:" << qSource << ", sha256 data:" << qSha256Bytes.toHex();



posted on 2021-06-03 17:31 Khan 閱讀(13954) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩国产大片| 日韩网站免费观看| 最新日韩在线视频| 欧美区在线播放| 亚洲一区二区三区精品在线观看 | 99热精品在线| 欧美日韩dvd在线观看| 一区二区av| 久久精品人人做人人综合| 亚洲国产高潮在线观看| 欧美高清不卡在线| 亚洲午夜激情网站| 老牛嫩草一区二区三区日本 | 中文成人激情娱乐网| 国产精品你懂的| 久久精品国产99国产精品| 91久久久久| 午夜一级在线看亚洲| 亚洲国产精品一区二区尤物区| 欧美日韩精品免费观看视频完整| 午夜精品电影| 亚洲二区精品| 欧美在线欧美在线| 亚洲国产片色| 国产日韩欧美亚洲一区| 欧美激情一区二区久久久| 亚洲男人的天堂在线| 亚洲国产精品99久久久久久久久| 午夜精品一区二区三区在线视| 亚洲大胆女人| 国产精品手机视频| 欧美高清自拍一区| 久久精品一二三| 一卡二卡3卡四卡高清精品视频| 米奇777在线欧美播放| 亚洲一区二区三区在线| **欧美日韩vr在线| 国产精品国产三级国产专播品爱网| 久久综合狠狠综合久久综青草| 亚洲深夜福利网站| 欧美国产在线电影| 久久人人爽爽爽人久久久| 亚洲一区日韩在线| 亚洲黄色片网站| 国产揄拍国内精品对白| 国产精品免费看| 欧美精品在线一区| 欧美1区2区3区| 久久资源av| 欧美一区二区三区成人| 亚洲午夜av在线| 日韩亚洲成人av在线| 欧美电影免费观看大全| 久久综合伊人77777| 欧美一区二区性| 亚洲摸下面视频| 亚洲免费人成在线视频观看| 一本色道久久88精品综合| 91久久精品美女高潮| 亚洲国产成人不卡| 国产专区欧美专区| 国产欧美日韩亚州综合| 国产精品一区久久| 国产精品ⅴa在线观看h| 国产精品福利av| 欧美日在线观看| 欧美日韩视频在线观看一区二区三区| 欧美国产精品专区| 免播放器亚洲一区| 欧美成人免费在线观看| 欧美电影在线| 欧美噜噜久久久xxx| 欧美精品乱码久久久久久按摩| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美日韩成人一区| 欧美激情一二三区| 欧美另类高清视频在线| 欧美日韩国产综合新一区| 欧美日韩爆操| 欧美图区在线视频| 国产精品伦一区| 国产视频一区二区在线观看| 狠狠色丁香久久婷婷综合丁香| 国内精品久久久久久久影视蜜臀 | 亚洲国产精品成人精品| 亚洲欧洲在线看| 中文亚洲字幕| 亚洲欧美综合一区| 久久精品国产免费看久久精品| 久久精品一区二区三区中文字幕| 久久九九免费视频| 欧美第一黄色网| 国产精品av久久久久久麻豆网| 国产精品theporn| 国产日韩欧美一区| 亚洲电影在线看| 一区二区欧美亚洲| 午夜精品影院| 美女黄毛**国产精品啪啪 | 欧美日韩成人精品| 国产精品麻豆成人av电影艾秋| 国产一区成人| 亚洲精品日本| 午夜精品国产更新| 久久午夜精品一区二区| 91久久精品国产| 亚洲欧美国产精品桃花| 久久野战av| 国产精品99免视看9| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲在线视频观看| 亚洲欧美日本在线| 欧美一区二区三区四区在线 | 久久综合99re88久久爱| 亚洲国产另类 国产精品国产免费| 日韩小视频在线观看专区| 亚洲综合成人在线| 免费日韩视频| 国产精品美女在线观看| 亚洲福利视频二区| 午夜国产精品视频免费体验区| 欧美福利在线观看| 这里只有精品电影| 麻豆精品国产91久久久久久| 国产精品入口福利| 亚洲欧洲综合| 久久先锋影音| 亚洲少妇中出一区| 欧美精品久久一区二区| 尤妮丝一区二区裸体视频| 亚洲免费视频观看| 亚洲国产精品久久91精品| 欧美在线在线| 国产精品一国产精品k频道56| 亚洲精品日韩激情在线电影 | 欧美成人精品一区二区| 亚洲一区三区视频在线观看| 欧美精品日韩一本| 在线观看91精品国产麻豆| 欧美在线观看一区二区| 夜夜嗨av一区二区三区网页| 免费永久网站黄欧美| 激情视频一区| 久久成人免费网| 亚洲综合色网站| 国产精品99免视看9| 一区二区三区四区国产精品| 欧美岛国在线观看| 久久人人97超碰精品888| 国产一区二区三区四区三区四| 欧美一区二区高清在线观看| 99视频一区二区| 欧美日韩高清在线| 夜夜嗨av色一区二区不卡| 亚洲国产欧美日韩另类综合| 蜜臀91精品一区二区三区| 亚洲第一黄网| 欧美国产视频在线| 欧美成人午夜激情视频| 亚洲美女91| 亚洲欧洲一区二区三区久久| 欧美激情视频在线播放| 99re6热只有精品免费观看 | 91久久国产精品91久久性色| 久久久久网站| 久久久久久夜精品精品免费| 在线免费精品视频| 欧美国产第二页| 欧美精品不卡| 国产精品99久久久久久有的能看| 亚洲麻豆国产自偷在线| 欧美日韩色婷婷| 亚洲专区在线视频| 午夜国产一区| 在线观看欧美激情| 亚洲国产综合在线看不卡| 欧美日本簧片| 欧美亚洲自偷自偷| 久久久久免费| 日韩午夜在线视频| 一区二区三区日韩欧美| 国产精品一区二区三区观看| 久久黄色小说| 麻豆精品一区二区av白丝在线| 亚洲伦理在线观看| 一本色道久久综合亚洲精品高清| 国产欧美日韩亚州综合| 欧美a级一区| 欧美日韩免费观看一区二区三区| 午夜精品婷婷| 久久综合国产精品台湾中文娱乐网| 日韩一级大片在线| 国产精品99久久99久久久二8 | 亚洲黄色在线| 国产精品成人午夜| 老牛国产精品一区的观看方式| 欧美精品在线观看一区二区| 欧美制服第一页| 欧美v日韩v国产v| 亚洲欧美另类综合偷拍|