⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwdbased_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00082                 hmac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca5">Update</a>(salt, saltLen);00083                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j;00084                 <span class="keywordflow">for</span> (j=0; j&lt;4; j++)00085                 {00086                         byte b = i &gt;&gt; ((3-j)*8);00087                         hmac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca5">Update</a>(&amp;b, 1);00088                 }00089                 hmac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final</a>(buffer);00090 00091                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> segmentLen = STDMIN(derivedLen, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)buffer.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00092                 memcpy(derived, buffer, segmentLen);00093 00094                 <span class="keywordflow">for</span> (j=1; j&lt;iterations; j++)00095                 {00096                         hmac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea14">CalculateDigest</a>(buffer, buffer, buffer.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00097                         xorbuf(derived, buffer, segmentLen);00098                 }00099 00100                 derived += segmentLen;00101                 derivedLen -= segmentLen;00102                 i++;00103         }00104 }00105 <span class="comment"></span>00106 <span class="comment">//! PBKDF from PKCS #12, appendix B, T should be a HashTransformation class</span>00107 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00108"></a><a class="code" href="class_p_k_c_s12___p_b_k_d_f.html">00108</a> <span class="keyword">class </span><a class="code" href="class_p_k_c_s12___p_b_k_d_f.html">PKCS12_PBKDF</a> : <span class="keyword">public</span> PasswordBasedKeyDerivationFunction00109 {00110 <span class="keyword">public</span>:00111         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxDerivedKeyLength()<span class="keyword"> const </span>{<span class="keywordflow">return</span> UINT_MAX;}00112         <span class="keywordtype">void</span> GeneralDeriveKey(byte *derived, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> derivedLen, byte purpose, <span class="keyword">const</span> byte *password, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> passwordLen, <span class="keyword">const</span> byte *salt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> saltLen, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations)<span class="keyword"> const</span>00113 <span class="keyword">                </span>{DeriveKey(derived, derivedLen, purpose, password, passwordLen, salt, saltLen, iterations);}00114         <span class="keywordtype">void</span> DeriveKey(byte *derived, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> derivedLen, byte ID, <span class="keyword">const</span> byte *password, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> passwordLen, <span class="keyword">const</span> byte *salt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> saltLen, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations=1000) <span class="keyword">const</span>;00115 };00116 00117 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00118 <span class="keywordtype">void</span> <a class="code" href="class_p_k_c_s12___p_b_k_d_f.html">PKCS12_PBKDF&lt;T&gt;::DeriveKey</a>(byte *derived, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> derivedLen, byte ID, <span class="keyword">const</span> byte *password, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> passwordLen, <span class="keyword">const</span> byte *salt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> saltLen, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations)<span class="keyword"> const</span>00119 <span class="keyword"></span>{00120         assert(derivedLen &lt;= MaxDerivedKeyLength());00121         assert(iterations &gt; 0);00122 00123         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> v = T::BLOCKSIZE;    <span class="comment">// v is in bytes rather than bits as in PKCS #12</span>00124         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DLen = v, SLen = RoundUpToMultipleOf(saltLen, v);00125         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen = RoundUpToMultipleOf(passwordLen, v), ILen = SLen + PLen;00126         <a class="code" href="class_sec_block.html">SecByteBlock</a> buffer(DLen + SLen + PLen);00127         byte *D = buffer, *S = buffer+DLen, *P = buffer+DLen+SLen, *I = S;00128 00129         memset(D, ID, DLen);00130         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;00131         <span class="keywordflow">for</span> (i=0; i&lt;SLen; i++)00132                 S[i] = salt[i % saltLen];00133         <span class="keywordflow">for</span> (i=0; i&lt;PLen; i++)00134                 P[i] = password[i % passwordLen];00135 00136 00137         T hash;00138         <a class="code" href="class_sec_block.html">SecByteBlock</a> Ai(T::DIGESTSIZE), B(v);00139 00140         <span class="keywordflow">while</span> (derivedLen &gt; 0)00141         {00142                 hash.CalculateDigest(Ai, buffer, buffer.size());00143                 <span class="keywordflow">for</span> (i=1; i&lt;iterations; i++)00144                         hash.CalculateDigest(Ai, Ai, Ai.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00145                 <span class="keywordflow">for</span> (i=0; i&lt;B.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>(); i++)00146                         B[i] = Ai[i % Ai.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>()];00147 00148                 <a class="code" href="class_integer.html">Integer</a> B1(B, B.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00149                 ++B1;00150                 <span class="keywordflow">for</span> (i=0; i&lt;ILen; i+=v)00151                         (<a class="code" href="class_integer.html">Integer</a>(I+i, v) + B1).Encode(I+i, v);00152 00153                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> segmentLen = STDMIN(derivedLen, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)Ai.size());00154                 memcpy(derived, Ai, segmentLen);00155                 derived += segmentLen;00156                 derivedLen -= segmentLen;00157         }00158 }00159 00160 NAMESPACE_END00161 00162 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:22 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -