BlowFish 高速 对称加密

  1. string key = "this is my key";
  2. BlowFish algo = new BlowFish(key);
  3.  
  4. string encryptedTxt = algo.Encrypt_CBC("this is my test string");
  5. string decryptedTxt = algo.Decrypt_CBC(encryptedTxt);
  6.  
  7. algo = new BlowFish(key);
  8. byte[] encryptedTxt1 = algo.Encrypt_ECB(Encoding.UTF8.GetBytes(key));
  9. byte[] decryptedTxt1 = algo.Decrypt_ECB(encryptedTxt1);
  10. string gg = Encoding.UTF8.GetString(decryptedTxt1);

  

  1. //Blowfish encryption (ECB, CBC and CTR mode) as defined by Bruce Schneier here: http://www.schneier.com/paper-blowfish-fse.html
  2. //Complies with test vectors found here: http://www.schneier.com/code/vectors.txt
  3. //non-standard mode provided to be usable with the javascript crypto library found here: http://etherhack.co.uk/symmetric/blowfish/blowfish.html
  4. //By Taylor Hornby, 1/7/1010,
  5. //Code is partly adopted from the javascript crypto library by Daniel Rench
  6.  
  7. /*USAGE:
  8.  
  9. Provide the key when creating the object. The key can be any size up to 448 bits.
  10. The key can be given as a hex string or an array of bytes.
  11. BlowFish b = new BlowFish("04B915BA43FEB5B6");
  12.  
  13. The plainText can be either a string or byte array.
  14. string plainText = "The quick brown fox jumped over the lazy dog.";
  15.  
  16. Use the Encypt_* methods to encrypt the plaintext in the mode that you want.
  17. To Encrypt or decrypt a byte array using CBC or CTR mode, an array of bytes, you must provide an initialization vector.
  18. A random IV can be created by calling SetRandomIV, then accessed with the IV property as it will be required to decrypt the data.
  19. It is safe for the IV to be known by an attacker, as long as it is NEVER reused. IVs are handled automatically when encrypting and decrypting strings.
  20. string cipherText = b.Encrypt_CBC(plainText);
  21. MessageBox.Show(cipherText);
  22.  
  23. Use the same mode of operation for decryption.
  24. plainText = b.Decrypt_CBC(cipherText);
  25. MessageBox.Show(plainText);
  26. */
  27.  
  28. /*Which mode should I use?
  29. *---ECB---
  30. * ECB mode encrypts each block of data with the same key, so patterns in a large set of data will be visible.
  31. * Encrypting the same data with the same key will result in the same ciphertext. This mode should NOT be used unless neccessary.
  32. *
  33. *---CBC---
  34. * CBC mode encrypts each block of data in succession so that any changes in the data will result in a completly different ciphertext.
  35. * Also, an IV is used so that encrypting the same data with the same key will result in a different ciphertext.
  36. * CBC mode is the most popular mode of operation.
  37. *
  38. *---CTR---
  39. * CTR mode uses an IV and a counter to encrypt each block individually.
  40. * Like ECB mode, with the added protection of an IV to make sure the same plaintext encrypted with the same key yeilds a different result.
  41. * The counter ensures that no patterns will be visible. CTR mode is secure and can be optimized for multi-threaded applications.
  42. *
  43. * For more information on cipher modes of operation, see http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
  44. */
  45.  
  46. /*Things to remember
  47. * -Always use unique initialization vectors when using CBC and CTR mode. SetRandomIV will do the job for you.
  48. * -Blowfish is only as secure as the key you provide. When derriving a key from a password, use a secure hash function such as SHA-256 to create the key.
  49. * -Read "Which mode should I use?" and choose the best mode for your application
  50. * -Use a MAC to ensure that the ciphertext and IV have not been modified.
  51. * -Do not use the compatibility mode unless neccessary.
  52. */
  53.  
  54. using System;
  55. using System.Text;
  56. using System.Security.Cryptography;
  57.  
  58. namespace 测试
  59. {
  60. class BlowFish
  61. {
  62. #region "Global variables and constants"
  63.  
  64. const int ROUNDS = 16; //standard is 16, to increase the number of rounds, bf_P needs to be equal to the number of rouds. Use digits of PI.
  65.  
  66. //Random number generator for creating IVs
  67. RNGCryptoServiceProvider randomSource;
  68.  
  69. //SBLOCKS
  70. private uint[] bf_s0;
  71. private uint[] bf_s1;
  72. private uint[] bf_s2;
  73. private uint[] bf_s3;
  74.  
  75. private uint[] bf_P;
  76.  
  77. //KEY
  78. private byte[] key;
  79.  
  80. //HALF-BLOCKS
  81. private uint xl_par;
  82. private uint xr_par;
  83.  
  84. //Initialization Vector for CBC and CTR mode
  85. private byte[] InitVector;
  86. private bool IVSet;
  87.  
  88. //For compatibility with the javascript crypto library:
  89. // http://etherhack.co.uk/symmetric/blowfish/blowfish.html
  90. private bool nonStandardMethod;
  91.  
  92. #endregion
  93.  
  94. #region "Constructors"
  95.  
  96. /// <summary>
  97. /// Constructor for hex key
  98. /// </summary>
  99. /// <param name="hexKey">Cipher key as a hex string</param>
  100. public BlowFish(string hexKey)
  101. {
  102. randomSource = new RNGCryptoServiceProvider();
  103. SetupKey(HexToByte(hexKey));
  104. }
  105.  
  106. /// <summary>
  107. /// Constructor for byte key
  108. /// </summary>
  109. /// <param name="cipherKey">Cipher key as a byte array</param>
  110. public BlowFish(byte[] cipherKey)
  111. {
  112. randomSource = new RNGCryptoServiceProvider();
  113. SetupKey(cipherKey);
  114. }
  115.  
  116. #endregion
  117.  
  118. #region "Public methods"
  119.  
  120. /// <summary>
  121. /// Encrypts a string in CBC mode
  122. /// </summary>
  123. /// <param name="pt">Plaintext data to encrypt</param>
  124. /// <returns>Ciphertext with IV appended to front</returns>
  125. public string Encrypt_CBC(string pt)
  126. {
  127. if (!IVSet)
  128. SetRandomIV();
  129. return ByteToHex(InitVector) + ByteToHex(Encrypt_CBC(Encoding.ASCII.GetBytes(pt)));
  130. }
  131.  
  132. /// <summary>
  133. /// Decrypts a string in CBC mode
  134. /// </summary>
  135. /// <param name="ct">Ciphertext with IV appended to front</param>
  136. /// <returns>Plaintext</returns>
  137. public string Decrypt_CBC(string ct)
  138. {
  139. IV = HexToByte(ct.Substring(0, 16));
  140. return Encoding.ASCII.GetString(Decrypt_CBC(HexToByte(ct.Substring(16)))).Replace("\0", "");
  141. }
  142.  
  143. /// <summary>
  144. /// Decrypts a byte array in CBC mode.
  145. /// IV must be created and saved manually.
  146. /// </summary>
  147. /// <param name="ct">Ciphertext data to decrypt</param>
  148. /// <returns>Plaintext</returns>
  149. public byte[] Decrypt_CBC(byte[] ct)
  150. {
  151. return Crypt_CBC(ct, true);
  152. }
  153.  
  154. /// <summary>
  155. /// Encrypts a byte array in CBC mode.
  156. /// IV must be created and saved manually.
  157. /// </summary>
  158. /// <param name="pt">Plaintext data to encrypt</param>
  159. /// <returns>Ciphertext</returns>
  160. public byte[] Encrypt_CBC(byte[] pt)
  161. {
  162. return Crypt_CBC(pt, false);
  163. }
  164.  
  165. /// <summary>
  166. /// Encrypt a string in ECB mode
  167. /// </summary>
  168. /// <param name="pt">Plaintext to encrypt as ascii string</param>
  169. /// <returns>hex value of encrypted data</returns>
  170. public string Encrypt_ECB(string pt)
  171. {
  172. return ByteToHex(Encrypt_ECB(Encoding.ASCII.GetBytes(pt)));
  173. }
  174.  
  175. /// <summary>
  176. /// Decrypts a string (ECB)
  177. /// </summary>
  178. /// <param name="ct">hHex string of the ciphertext</param>
  179. /// <returns>Plaintext ascii string</returns>
  180. public string Decrypt_ECB(string ct)
  181. {
  182. return Encoding.ASCII.GetString(Decrypt_ECB(HexToByte(ct))).Replace("\0", "");
  183. }
  184.  
  185. /// <summary>
  186. /// Encrypts a byte array in ECB mode
  187. /// </summary>
  188. /// <param name="pt">Plaintext data</param>
  189. /// <returns>Ciphertext bytes</returns>
  190. public byte[] Encrypt_ECB(byte[] pt)
  191. {
  192. return Crypt_ECB(pt, false);
  193. }
  194.  
  195. /// <summary>
  196. /// Decrypts a byte array (ECB)
  197. /// </summary>
  198. /// <param name="ct">Ciphertext byte array</param>
  199. /// <returns>Plaintext</returns>
  200. public byte[] Decrypt_ECB(byte[] ct)
  201. {
  202. return Crypt_ECB(ct, true);
  203. }
  204.  
  205. /// <summary>
  206. /// Encrypts a string (CTR)
  207. /// </summary>
  208. /// <param name="pt">The plaintext to encrypt</param>
  209. /// <returns>The ciphertext</returns>
  210. public string Encrypt_CTR(string pt)
  211. {
  212. if (!IVSet)
  213. SetRandomIV();
  214. return ByteToHex(InitVector) + ByteToHex(Crypt_CTR(Encoding.ASCII.GetBytes(pt), 2));
  215. }
  216.  
  217. /// <summary>
  218. /// Decrypt a string (CTR)
  219. /// </summary>
  220. /// <param name="ct">The ciphertext to decrypt</param>
  221. /// <returns>The plaintext</returns>
  222. public string Decrypt_CTR(string ct)
  223. {
  224. IV = HexToByte(ct.Substring(0, 16));
  225. return Encoding.ASCII.GetString(Crypt_CTR(HexToByte(ct.Substring(16)), 2)).Replace("\0", "");
  226. }
  227.  
  228. /// <summary>
  229. /// Initialization vector for CBC mode.
  230. /// </summary>
  231. public byte[] IV
  232. {
  233. get { return InitVector; }
  234. set
  235. {
  236. if (value.Length == 8)
  237. {
  238. InitVector = value;
  239. IVSet = true;
  240. }
  241. else
  242. {
  243. throw new Exception("Invalid IV size.");
  244. }
  245. }
  246. }
  247.  
  248. public bool NonStandard
  249. {
  250. get { return nonStandardMethod; }
  251. set { nonStandardMethod = value; }
  252. }
  253.  
  254. /// <summary>
  255. /// Creates and sets a random initialization vector.
  256. /// </summary>
  257. /// <returns>The random IV</returns>
  258. public byte[] SetRandomIV()
  259. {
  260. InitVector = new byte[8];
  261. randomSource.GetBytes(InitVector);
  262. IVSet = true;
  263. return InitVector;
  264. }
  265.  
  266. #endregion
  267.  
  268. #region Cryptography
  269.  
  270. /// <summary>
  271. /// Sets up the S-blocks and the key
  272. /// </summary>
  273. /// <param name="cipherKey">Block cipher key (1-448 bits)</param>
  274. private void SetupKey(byte[] cipherKey)
  275. {
  276. bf_P = SetupP();
  277. //set up the S blocks
  278. bf_s0 = SetupS0();
  279. bf_s1 = SetupS1();
  280. bf_s2 = SetupS2();
  281. bf_s3 = SetupS3();
  282.  
  283. key = new byte[cipherKey.Length]; // 448 bits
  284. if (cipherKey.Length > 56)
  285. {
  286. throw new Exception("Key too long. 56 bytes required.");
  287. }
  288.  
  289. Buffer.BlockCopy(cipherKey, 0, key, 0, cipherKey.Length);
  290. int j = 0;
  291. for (int i = 0; i < 18; i++)
  292. {
  293. uint d = (uint)(((key[j % cipherKey.Length] * 256 + key[(j + 1) % cipherKey.Length]) * 256 + key[(j + 2) % cipherKey.Length]) * 256 + key[(j + 3) % cipherKey.Length]);
  294. bf_P[i] ^= d;
  295. j = (j + 4) % cipherKey.Length;
  296. }
  297.  
  298. xl_par = 0;
  299. xr_par = 0;
  300. for (int i = 0; i < 18; i += 2)
  301. {
  302. encipher();
  303. bf_P[i] = xl_par;
  304. bf_P[i + 1] = xr_par;
  305. }
  306.  
  307. for (int i = 0; i < 256; i += 2)
  308. {
  309. encipher();
  310. bf_s0[i] = xl_par;
  311. bf_s0[i + 1] = xr_par;
  312. }
  313. for (int i = 0; i < 256; i += 2)
  314. {
  315. encipher();
  316. bf_s1[i] = xl_par;
  317. bf_s1[i + 1] = xr_par;
  318. }
  319. for (int i = 0; i < 256; i += 2)
  320. {
  321. encipher();
  322. bf_s2[i] = xl_par;
  323. bf_s2[i + 1] = xr_par;
  324. }
  325. for (int i = 0; i < 256; i += 2)
  326. {
  327. encipher();
  328. bf_s3[i] = xl_par;
  329. bf_s3[i + 1] = xr_par;
  330. }
  331. }
  332.  
  333. /// <summary>
  334. /// Encrypts or decrypts data in ECB mode
  335. /// </summary>
  336. /// <param name="text">plain/ciphertext</param>
  337. /// <param name="decrypt">true to decrypt, false to encrypt</param>
  338. /// <returns>(En/De)crypted data</returns>
  339. private byte[] Crypt_ECB(byte[] text, bool decrypt)
  340. {
  341. int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
  342. byte[] plainText = new byte[paddedLen];
  343. Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
  344. byte[] block = new byte[8];
  345. for (int i = 0; i < plainText.Length; i += 8)
  346. {
  347. Buffer.BlockCopy(plainText, i, block, 0, 8);
  348. if (decrypt)
  349. {
  350. BlockDecrypt(ref block);
  351. }
  352. else
  353. {
  354. BlockEncrypt(ref block);
  355. }
  356. Buffer.BlockCopy(block, 0, plainText, i, 8);
  357. }
  358. return plainText;
  359. }
  360.  
  361. public byte[] Crypt_CTR(byte[] text, int numThreads)
  362. {
  363. if (!IVSet)
  364. {
  365. throw new Exception("IV not set.");
  366. }
  367. byte[] input = new byte[8];
  368. byte[] counter = new byte[8];
  369. int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
  370. byte[] plainText = new byte[paddedLen];
  371. Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
  372. byte[] block = new byte[8];
  373. for (int i = 0; i < plainText.Length; i += 8)
  374. {
  375. for (int x = 0; x < 8; x++)
  376. {
  377. input[x] = (byte)(counter[x] ^ InitVector[x]);
  378. }
  379. Buffer.BlockCopy(plainText, i, block, 0, 8);
  380. BlockEncrypt(ref input);
  381. XorBlock(ref block, input);
  382. Buffer.BlockCopy(block, 0, plainText, i, 8);
  383. }
  384. return plainText;
  385. }
  386.  
  387. /// <summary>
  388. /// Encrypts or decrypts data in CBC mode
  389. /// </summary>
  390. /// <param name="text">plain/ciphertext</param>
  391. /// <param name="decrypt">true to decrypt, false to encrypt</param>
  392. /// <returns>(En/De)crypted data</returns>
  393. private byte[] Crypt_CBC(byte[] text, bool decrypt)
  394. {
  395. if (!IVSet)
  396. {
  397. throw new Exception("IV not set.");
  398. }
  399. int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
  400. byte[] plainText = new byte[paddedLen];
  401. Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
  402. byte[] block = new byte[8];
  403. byte[] preblock = new byte[8];
  404. byte[] iv = new byte[8];
  405. Buffer.BlockCopy(InitVector, 0, iv, 0, 8);
  406. if (!decrypt)
  407. {
  408. for (int i = 0; i < plainText.Length; i += 8)
  409. {
  410. Buffer.BlockCopy(plainText, i, block, 0, 8);
  411. XorBlock(ref block, iv);
  412. BlockEncrypt(ref block);
  413. Buffer.BlockCopy(block, 0, iv, 0, 8);
  414. Buffer.BlockCopy(block, 0, plainText, i, 8);
  415. }
  416. }
  417. else
  418. {
  419. for (int i = 0; i < plainText.Length; i += 8)
  420. {
  421. Buffer.BlockCopy(plainText, i, block, 0, 8);
  422.  
  423. Buffer.BlockCopy(block, 0, preblock, 0, 8);
  424. BlockDecrypt(ref block);
  425. XorBlock(ref block, iv);
  426. Buffer.BlockCopy(preblock, 0, iv, 0, 8);
  427.  
  428. Buffer.BlockCopy(block, 0, plainText, i, 8);
  429. }
  430. }
  431. return plainText;
  432. }
  433.  
  434. /// <summary>
  435. /// XoR encrypts two 8 bit blocks
  436. /// </summary>
  437. /// <param name="block">8 bit block 1</param>
  438. /// <param name="iv">8 bit block 2</param>
  439. private void XorBlock(ref byte[] block, byte[] iv)
  440. {
  441. for (int i = 0; i < block.Length; i++)
  442. {
  443. block[i] ^= iv[i];
  444. }
  445. }
  446.  
  447. /// <summary>
  448. /// Encrypts a 64 bit block
  449. /// </summary>
  450. /// <param name="block">The 64 bit block to encrypt</param>
  451. private void BlockEncrypt(ref byte[] block)
  452. {
  453. SetBlock(block);
  454. encipher();
  455. GetBlock(ref block);
  456. }
  457.  
  458. /// <summary>
  459. /// Decrypts a 64 bit block
  460. /// </summary>
  461. /// <param name="block">The 64 bit block to decrypt</param>
  462. private void BlockDecrypt(ref byte[] block)
  463. {
  464. SetBlock(block);
  465. decipher();
  466. GetBlock(ref block);
  467. }
  468.  
  469. /// <summary>
  470. /// Splits the block into the two uint values
  471. /// </summary>
  472. /// <param name="block">the 64 bit block to setup</param>
  473. private void SetBlock(byte[] block)
  474. {
  475. byte[] block1 = new byte[4];
  476. byte[] block2 = new byte[4];
  477. Buffer.BlockCopy(block, 0, block1, 0, 4);
  478. Buffer.BlockCopy(block, 4, block2, 0, 4);
  479. //split the block
  480. if (nonStandardMethod)
  481. {
  482. xr_par = BitConverter.ToUInt32(block1, 0);
  483. xl_par = BitConverter.ToUInt32(block2, 0);
  484. }
  485. else
  486. {
  487. //ToUInt32 requires the bytes in reverse order
  488. Array.Reverse(block1);
  489. Array.Reverse(block2);
  490. xl_par = BitConverter.ToUInt32(block1, 0);
  491. xr_par = BitConverter.ToUInt32(block2, 0);
  492. }
  493. }
  494.  
  495. /// <summary>
  496. /// Converts the two uint values into a 64 bit block
  497. /// </summary>
  498. /// <param name="block">64 bit buffer to receive the block</param>
  499. private void GetBlock(ref byte[] block)
  500. {
  501. byte[] block1 = new byte[4];
  502. byte[] block2 = new byte[4];
  503. if (nonStandardMethod)
  504. {
  505. block1 = BitConverter.GetBytes(xr_par);
  506. block2 = BitConverter.GetBytes(xl_par);
  507. }
  508. else
  509. {
  510. block1 = BitConverter.GetBytes(xl_par);
  511. block2 = BitConverter.GetBytes(xr_par);
  512.  
  513. //GetBytes returns the bytes in reverse order
  514. Array.Reverse(block1);
  515. Array.Reverse(block2);
  516. }
  517. //join the block
  518. Buffer.BlockCopy(block1, 0, block, 0, 4);
  519. Buffer.BlockCopy(block2, 0, block, 4, 4);
  520. }
  521.  
  522. /// <summary>
  523. /// Runs the blowfish algorithm (standard 16 rounds)
  524. /// </summary>
  525. private void encipher()
  526. {
  527. xl_par ^= bf_P[0];
  528. for (uint i = 0; i < ROUNDS; i += 2)
  529. {
  530. xr_par = round(xr_par, xl_par, i + 1);
  531. xl_par = round(xl_par, xr_par, i + 2);
  532. }
  533. xr_par = xr_par ^ bf_P[17];
  534.  
  535. //swap the blocks
  536. uint swap = xl_par;
  537. xl_par = xr_par;
  538. xr_par = swap;
  539. }
  540.  
  541. /// <summary>
  542. /// Runs the blowfish algorithm in reverse (standard 16 rounds)
  543. /// </summary>
  544. private void decipher()
  545. {
  546. xl_par ^= bf_P[17];
  547. for (uint i = 16; i > 0; i -= 2)
  548. {
  549. xr_par = round(xr_par, xl_par, i);
  550. xl_par = round(xl_par, xr_par, i - 1);
  551. }
  552. xr_par = xr_par ^ bf_P[0];
  553.  
  554. //swap the blocks
  555. uint swap = xl_par;
  556. xl_par = xr_par;
  557. xr_par = swap;
  558. }
  559.  
  560. /// <summary>
  561. /// one round of the blowfish algorithm
  562. /// </summary>
  563. /// <param name="a">See spec</param>
  564. /// <param name="b">See spec</param>
  565. /// <param name="n">See spec</param>
  566. /// <returns></returns>
  567. private uint round(uint a, uint b, uint n)
  568. {
  569. uint x1 = (bf_s0[wordByte0(b)] + bf_s1[wordByte1(b)]) ^ bf_s2[wordByte2(b)];
  570. uint x2 = x1 + bf_s3[this.wordByte3(b)];
  571. uint x3 = x2 ^ bf_P[n];
  572. return x3 ^ a;
  573. }
  574.  
  575. #endregion
  576.  
  577. #region SBLOCKS
  578. //SBLOCKS ARE THE HEX DIGITS OF PI.
  579. //The amount of hex digits can be increased if you want to experiment with more rounds and longer key lengths
  580.  
  581. //Increase the size of this array when increasing the number of rounds
  582. private uint[] SetupP()
  583. {
  584. return new uint[] {
  585. 0x243f6a88,0x85a308d3,0x13198a2e,0x03707344,0xa4093822,0x299f31d0,
  586. 0x082efa98,0xec4e6c89,0x452821e6,0x38d01377,0xbe5466cf,0x34e90c6c,
  587. 0xc0ac29b7,0xc97c50dd,0x3f84d5b5,0xb5470917,0x9216d5d9,0x8979fb1b
  588. };
  589. }
  590.  
  591. private uint[] SetupS0()
  592. {
  593. return new uint[] {
  594. 0xd1310ba6,0x98dfb5ac,0x2ffd72db,0xd01adfb7,0xb8e1afed,0x6a267e96,
  595. 0xba7c9045,0xf12c7f99,0x24a19947,0xb3916cf7,0x0801f2e2,0x858efc16,
  596. 0x636920d8,0x71574e69,0xa458fea3,0xf4933d7e,0x0d95748f,0x728eb658,
  597. 0x718bcd58,0x82154aee,0x7b54a41d,0xc25a59b5,0x9c30d539,0x2af26013,
  598. 0xc5d1b023,0x286085f0,0xca417918,0xb8db38ef,0x8e79dcb0,0x603a180e,
  599. 0x6c9e0e8b,0xb01e8a3e,0xd71577c1,0xbd314b27,0x78af2fda,0x55605c60,
  600. 0xe65525f3,0xaa55ab94,0x57489862,0x63e81440,0x55ca396a,0x2aab10b6,
  601. 0xb4cc5c34,0x1141e8ce,0xa15486af,0x7c72e993,0xb3ee1411,0x636fbc2a,
  602. 0x2ba9c55d,0x741831f6,0xce5c3e16,0x9b87931e,0xafd6ba33,0x6c24cf5c,
  603. 0x7a325381,0x28958677,0x3b8f4898,0x6b4bb9af,0xc4bfe81b,0x66282193,
  604. 0x61d809cc,0xfb21a991,0x487cac60,0x5dec8032,0xef845d5d,0xe98575b1,
  605. 0xdc262302,0xeb651b88,0x23893e81,0xd396acc5,0x0f6d6ff3,0x83f44239,
  606. 0x2e0b4482,0xa4842004,0x69c8f04a,0x9e1f9b5e,0x21c66842,0xf6e96c9a,
  607. 0x670c9c61,0xabd388f0,0x6a51a0d2,0xd8542f68,0x960fa728,0xab5133a3,
  608. 0x6eef0b6c,0x137a3be4,0xba3bf050,0x7efb2a98,0xa1f1651d,0x39af0176,
  609. 0x66ca593e,0x82430e88,0x8cee8619,0x456f9fb4,0x7d84a5c3,0x3b8b5ebe,
  610. 0xe06f75d8,0x85c12073,0x401a449f,0x56c16aa6,0x4ed3aa62,0x363f7706,
  611. 0x1bfedf72,0x429b023d,0x37d0d724,0xd00a1248,0xdb0fead3,0x49f1c09b,
  612. 0x075372c9,0x80991b7b,0x25d479d8,0xf6e8def7,0xe3fe501a,0xb6794c3b,
  613. 0x976ce0bd,0x04c006ba,0xc1a94fb6,0x409f60c4,0x5e5c9ec2,0x196a2463,
  614. 0x68fb6faf,0x3e6c53b5,0x1339b2eb,0x3b52ec6f,0x6dfc511f,0x9b30952c,
  615. 0xcc814544,0xaf5ebd09,0xbee3d004,0xde334afd,0x660f2807,0x192e4bb3,
  616. 0xc0cba857,0x45c8740f,0xd20b5f39,0xb9d3fbdb,0x5579c0bd,0x1a60320a,
  617. 0xd6a100c6,0x402c7279,0x679f25fe,0xfb1fa3cc,0x8ea5e9f8,0xdb3222f8,
  618. 0x3c7516df,0xfd616b15,0x2f501ec8,0xad0552ab,0x323db5fa,0xfd238760,
  619. 0x53317b48,0x3e00df82,0x9e5c57bb,0xca6f8ca0,0x1a87562e,0xdf1769db,
  620. 0xd542a8f6,0x287effc3,0xac6732c6,0x8c4f5573,0x695b27b0,0xbbca58c8,
  621. 0xe1ffa35d,0xb8f011a0,0x10fa3d98,0xfd2183b8,0x4afcb56c,0x2dd1d35b,
  622. 0x9a53e479,0xb6f84565,0xd28e49bc,0x4bfb9790,0xe1ddf2da,0xa4cb7e33,
  623. 0x62fb1341,0xcee4c6e8,0xef20cada,0x36774c01,0xd07e9efe,0x2bf11fb4,
  624. 0x95dbda4d,0xae909198,0xeaad8e71,0x6b93d5a0,0xd08ed1d0,0xafc725e0,
  625. 0x8e3c5b2f,0x8e7594b7,0x8ff6e2fb,0xf2122b64,0x8888b812,0x900df01c,
  626. 0x4fad5ea0,0x688fc31c,0xd1cff191,0xb3a8c1ad,0x2f2f2218,0xbe0e1777,
  627. 0xea752dfe,0x8b021fa1,0xe5a0cc0f,0xb56f74e8,0x18acf3d6,0xce89e299,
  628. 0xb4a84fe0,0xfd13e0b7,0x7cc43b81,0xd2ada8d9,0x165fa266,0x80957705,
  629. 0x93cc7314,0x211a1477,0xe6ad2065,0x77b5fa86,0xc75442f5,0xfb9d35cf,
  630. 0xebcdaf0c,0x7b3e89a0,0xd6411bd3,0xae1e7e49,0x00250e2d,0x2071b35e,
  631. 0x226800bb,0x57b8e0af,0x2464369b,0xf009b91e,0x5563911d,0x59dfa6aa,
  632. 0x78c14389,0xd95a537f,0x207d5ba2,0x02e5b9c5,0x83260376,0x6295cfa9,
  633. 0x11c81968,0x4e734a41,0xb3472dca,0x7b14a94a,0x1b510052,0x9a532915,
  634. 0xd60f573f,0xbc9bc6e4,0x2b60a476,0x81e67400,0x08ba6fb5,0x571be91f,
  635. 0xf296ec6b,0x2a0dd915,0xb6636521,0xe7b9f9b6,0xff34052e,0xc5855664,
  636. 0x53b02d5d,0xa99f8fa1,0x08ba4799,0x6e85076a
  637. };
  638. }
  639.  
  640. private uint[] SetupS1()
  641. {
  642. return new uint[] {
  643. 0x4b7a70e9,0xb5b32944,0xdb75092e,0xc4192623,0xad6ea6b0,0x49a7df7d,
  644. 0x9cee60b8,0x8fedb266,0xecaa8c71,0x699a17ff,0x5664526c,0xc2b19ee1,
  645. 0x193602a5,0x75094c29,0xa0591340,0xe4183a3e,0x3f54989a,0x5b429d65,
  646. 0x6b8fe4d6,0x99f73fd6,0xa1d29c07,0xefe830f5,0x4d2d38e6,0xf0255dc1,
  647. 0x4cdd2086,0x8470eb26,0x6382e9c6,0x021ecc5e,0x09686b3f,0x3ebaefc9,
  648. 0x3c971814,0x6b6a70a1,0x687f3584,0x52a0e286,0xb79c5305,0xaa500737,
  649. 0x3e07841c,0x7fdeae5c,0x8e7d44ec,0x5716f2b8,0xb03ada37,0xf0500c0d,
  650. 0xf01c1f04,0x0200b3ff,0xae0cf51a,0x3cb574b2,0x25837a58,0xdc0921bd,
  651. 0xd19113f9,0x7ca92ff6,0x94324773,0x22f54701,0x3ae5e581,0x37c2dadc,
  652. 0xc8b57634,0x9af3dda7,0xa9446146,0x0fd0030e,0xecc8c73e,0xa4751e41,
  653. 0xe238cd99,0x3bea0e2f,0x3280bba1,0x183eb331,0x4e548b38,0x4f6db908,
  654. 0x6f420d03,0xf60a04bf,0x2cb81290,0x24977c79,0x5679b072,0xbcaf89af,
  655. 0xde9a771f,0xd9930810,0xb38bae12,0xdccf3f2e,0x5512721f,0x2e6b7124,
  656. 0x501adde6,0x9f84cd87,0x7a584718,0x7408da17,0xbc9f9abc,0xe94b7d8c,
  657. 0xec7aec3a,0xdb851dfa,0x63094366,0xc464c3d2,0xef1c1847,0x3215d908,
  658. 0xdd433b37,0x24c2ba16,0x12a14d43,0x2a65c451,0x50940002,0x133ae4dd,
  659. 0x71dff89e,0x10314e55,0x81ac77d6,0x5f11199b,0x043556f1,0xd7a3c76b,
  660. 0x3c11183b,0x5924a509,0xf28fe6ed,0x97f1fbfa,0x9ebabf2c,0x1e153c6e,
  661. 0x86e34570,0xeae96fb1,0x860e5e0a,0x5a3e2ab3,0x771fe71c,0x4e3d06fa,
  662. 0x2965dcb9,0x99e71d0f,0x803e89d6,0x5266c825,0x2e4cc978,0x9c10b36a,
  663. 0xc6150eba,0x94e2ea78,0xa5fc3c53,0x1e0a2df4,0xf2f74ea7,0x361d2b3d,
  664. 0x1939260f,0x19c27960,0x5223a708,0xf71312b6,0xebadfe6e,0xeac31f66,
  665. 0xe3bc4595,0xa67bc883,0xb17f37d1,0x018cff28,0xc332ddef,0xbe6c5aa5,
  666. 0x65582185,0x68ab9802,0xeecea50f,0xdb2f953b,0x2aef7dad,0x5b6e2f84,
  667. 0x1521b628,0x29076170,0xecdd4775,0x619f1510,0x13cca830,0xeb61bd96,
  668. 0x0334fe1e,0xaa0363cf,0xb5735c90,0x4c70a239,0xd59e9e0b,0xcbaade14,
  669. 0xeecc86bc,0x60622ca7,0x9cab5cab,0xb2f3846e,0x648b1eaf,0x19bdf0ca,
  670. 0xa02369b9,0x655abb50,0x40685a32,0x3c2ab4b3,0x319ee9d5,0xc021b8f7,
  671. 0x9b540b19,0x875fa099,0x95f7997e,0x623d7da8,0xf837889a,0x97e32d77,
  672. 0x11ed935f,0x16681281,0x0e358829,0xc7e61fd6,0x96dedfa1,0x7858ba99,
  673. 0x57f584a5,0x1b227263,0x9b83c3ff,0x1ac24696,0xcdb30aeb,0x532e3054,
  674. 0x8fd948e4,0x6dbc3128,0x58ebf2ef,0x34c6ffea,0xfe28ed61,0xee7c3c73,
  675. 0x5d4a14d9,0xe864b7e3,0x42105d14,0x203e13e0,0x45eee2b6,0xa3aaabea,
  676. 0xdb6c4f15,0xfacb4fd0,0xc742f442,0xef6abbb5,0x654f3b1d,0x41cd2105,
  677. 0xd81e799e,0x86854dc7,0xe44b476a,0x3d816250,0xcf62a1f2,0x5b8d2646,
  678. 0xfc8883a0,0xc1c7b6a3,0x7f1524c3,0x69cb7492,0x47848a0b,0x5692b285,
  679. 0x095bbf00,0xad19489d,0x1462b174,0x23820e00,0x58428d2a,0x0c55f5ea,
  680. 0x1dadf43e,0x233f7061,0x3372f092,0x8d937e41,0xd65fecf1,0x6c223bdb,
  681. 0x7cde3759,0xcbee7460,0x4085f2a7,0xce77326e,0xa6078084,0x19f8509e,
  682. 0xe8efd855,0x61d99735,0xa969a7aa,0xc50c06c2,0x5a04abfc,0x800bcadc,
  683. 0x9e447a2e,0xc3453484,0xfdd56705,0x0e1e9ec9,0xdb73dbd3,0x105588cd,
  684. 0x675fda79,0xe3674340,0xc5c43465,0x713e38d8,0x3d28f89e,0xf16dff20,
  685. 0x153e21e7,0x8fb03d4a,0xe6e39f2b,0xdb83adf7
  686. };
  687. }
  688.  
  689. private uint[] SetupS2()
  690. {
  691. return new uint[] {
  692. 0xe93d5a68,0x948140f7,0xf64c261c,0x94692934,0x411520f7,0x7602d4f7,
  693. 0xbcf46b2e,0xd4a20068,0xd4082471,0x3320f46a,0x43b7d4b7,0x500061af,
  694. 0x1e39f62e,0x97244546,0x14214f74,0xbf8b8840,0x4d95fc1d,0x96b591af,
  695. 0x70f4ddd3,0x66a02f45,0xbfbc09ec,0x03bd9785,0x7fac6dd0,0x31cb8504,
  696. 0x96eb27b3,0x55fd3941,0xda2547e6,0xabca0a9a,0x28507825,0x530429f4,
  697. 0x0a2c86da,0xe9b66dfb,0x68dc1462,0xd7486900,0x680ec0a4,0x27a18dee,
  698. 0x4f3ffea2,0xe887ad8c,0xb58ce006,0x7af4d6b6,0xaace1e7c,0xd3375fec,
  699. 0xce78a399,0x406b2a42,0x20fe9e35,0xd9f385b9,0xee39d7ab,0x3b124e8b,
  700. 0x1dc9faf7,0x4b6d1856,0x26a36631,0xeae397b2,0x3a6efa74,0xdd5b4332,
  701. 0x6841e7f7,0xca7820fb,0xfb0af54e,0xd8feb397,0x454056ac,0xba489527,
  702. 0x55533a3a,0x20838d87,0xfe6ba9b7,0xd096954b,0x55a867bc,0xa1159a58,
  703. 0xcca92963,0x99e1db33,0xa62a4a56,0x3f3125f9,0x5ef47e1c,0x9029317c,
  704. 0xfdf8e802,0x04272f70,0x80bb155c,0x05282ce3,0x95c11548,0xe4c66d22,
  705. 0x48c1133f,0xc70f86dc,0x07f9c9ee,0x41041f0f,0x404779a4,0x5d886e17,
  706. 0x325f51eb,0xd59bc0d1,0xf2bcc18f,0x41113564,0x257b7834,0x602a9c60,
  707. 0xdff8e8a3,0x1f636c1b,0x0e12b4c2,0x02e1329e,0xaf664fd1,0xcad18115,
  708. 0x6b2395e0,0x333e92e1,0x3b240b62,0xeebeb922,0x85b2a20e,0xe6ba0d99,
  709. 0xde720c8c,0x2da2f728,0xd0127845,0x95b794fd,0x647d0862,0xe7ccf5f0,
  710. 0x5449a36f,0x877d48fa,0xc39dfd27,0xf33e8d1e,0x0a476341,0x992eff74,
  711. 0x3a6f6eab,0xf4f8fd37,0xa812dc60,0xa1ebddf8,0x991be14c,0xdb6e6b0d,
  712. 0xc67b5510,0x6d672c37,0x2765d43b,0xdcd0e804,0xf1290dc7,0xcc00ffa3,
  713. 0xb5390f92,0x690fed0b,0x667b9ffb,0xcedb7d9c,0xa091cf0b,0xd9155ea3,
  714. 0xbb132f88,0x515bad24,0x7b9479bf,0x763bd6eb,0x37392eb3,0xcc115979,
  715. 0x8026e297,0xf42e312d,0x6842ada7,0xc66a2b3b,0x12754ccc,0x782ef11c,
  716. 0x6a124237,0xb79251e7,0x06a1bbe6,0x4bfb6350,0x1a6b1018,0x11caedfa,
  717. 0x3d25bdd8,0xe2e1c3c9,0x44421659,0x0a121386,0xd90cec6e,0xd5abea2a,
  718. 0x64af674e,0xda86a85f,0xbebfe988,0x64e4c3fe,0x9dbc8057,0xf0f7c086,
  719. 0x60787bf8,0x6003604d,0xd1fd8346,0xf6381fb0,0x7745ae04,0xd736fccc,
  720. 0x83426b33,0xf01eab71,0xb0804187,0x3c005e5f,0x77a057be,0xbde8ae24,
  721. 0x55464299,0xbf582e61,0x4e58f48f,0xf2ddfda2,0xf474ef38,0x8789bdc2,
  722. 0x5366f9c3,0xc8b38e74,0xb475f255,0x46fcd9b9,0x7aeb2661,0x8b1ddf84,
  723. 0x846a0e79,0x915f95e2,0x466e598e,0x20b45770,0x8cd55591,0xc902de4c,
  724. 0xb90bace1,0xbb8205d0,0x11a86248,0x7574a99e,0xb77f19b6,0xe0a9dc09,
  725. 0x662d09a1,0xc4324633,0xe85a1f02,0x09f0be8c,0x4a99a025,0x1d6efe10,
  726. 0x1ab93d1d,0x0ba5a4df,0xa186f20f,0x2868f169,0xdcb7da83,0x573906fe,
  727. 0xa1e2ce9b,0x4fcd7f52,0x50115e01,0xa70683fa,0xa002b5c4,0x0de6d027,
  728. 0x9af88c27,0x773f8641,0xc3604c06,0x61a806b5,0xf0177a28,0xc0f586e0,
  729. 0x006058aa,0x30dc7d62,0x11e69ed7,0x2338ea63,0x53c2dd94,0xc2c21634,
  730. 0xbbcbee56,0x90bcb6de,0xebfc7da1,0xce591d76,0x6f05e409,0x4b7c0188,
  731. 0x39720a3d,0x7c927c24,0x86e3725f,0x724d9db9,0x1ac15bb4,0xd39eb8fc,
  732. 0xed545578,0x08fca5b5,0xd83d7cd3,0x4dad0fc4,0x1e50ef5e,0xb161e6f8,
  733. 0xa28514d9,0x6c51133c,0x6fd5c7e7,0x56e14ec4,0x362abfce,0xddc6c837,
  734. 0xd79a3234,0x92638212,0x670efa8e,0x406000e0
  735. };
  736. }
  737.  
  738. private uint[] SetupS3()
  739. {
  740. return new uint[] {
  741. 0x3a39ce37,0xd3faf5cf,0xabc27737,0x5ac52d1b,0x5cb0679e,0x4fa33742,
  742. 0xd3822740,0x99bc9bbe,0xd5118e9d,0xbf0f7315,0xd62d1c7e,0xc700c47b,
  743. 0xb78c1b6b,0x21a19045,0xb26eb1be,0x6a366eb4,0x5748ab2f,0xbc946e79,
  744. 0xc6a376d2,0x6549c2c8,0x530ff8ee,0x468dde7d,0xd5730a1d,0x4cd04dc6,
  745. 0x2939bbdb,0xa9ba4650,0xac9526e8,0xbe5ee304,0xa1fad5f0,0x6a2d519a,
  746. 0x63ef8ce2,0x9a86ee22,0xc089c2b8,0x43242ef6,0xa51e03aa,0x9cf2d0a4,
  747. 0x83c061ba,0x9be96a4d,0x8fe51550,0xba645bd6,0x2826a2f9,0xa73a3ae1,
  748. 0x4ba99586,0xef5562e9,0xc72fefd3,0xf752f7da,0x3f046f69,0x77fa0a59,
  749. 0x80e4a915,0x87b08601,0x9b09e6ad,0x3b3ee593,0xe990fd5a,0x9e34d797,
  750. 0x2cf0b7d9,0x022b8b51,0x96d5ac3a,0x017da67d,0xd1cf3ed6,0x7c7d2d28,
  751. 0x1f9f25cf,0xadf2b89b,0x5ad6b472,0x5a88f54c,0xe029ac71,0xe019a5e6,
  752. 0x47b0acfd,0xed93fa9b,0xe8d3c48d,0x283b57cc,0xf8d56629,0x79132e28,
  753. 0x785f0191,0xed756055,0xf7960e44,0xe3d35e8c,0x15056dd4,0x88f46dba,
  754. 0x03a16125,0x0564f0bd,0xc3eb9e15,0x3c9057a2,0x97271aec,0xa93a072a,
  755. 0x1b3f6d9b,0x1e6321f5,0xf59c66fb,0x26dcf319,0x7533d928,0xb155fdf5,
  756. 0x03563482,0x8aba3cbb,0x28517711,0xc20ad9f8,0xabcc5167,0xccad925f,
  757. 0x4de81751,0x3830dc8e,0x379d5862,0x9320f991,0xea7a90c2,0xfb3e7bce,
  758. 0x5121ce64,0x774fbe32,0xa8b6e37e,0xc3293d46,0x48de5369,0x6413e680,
  759. 0xa2ae0810,0xdd6db224,0x69852dfd,0x09072166,0xb39a460a,0x6445c0dd,
  760. 0x586cdecf,0x1c20c8ae,0x5bbef7dd,0x1b588d40,0xccd2017f,0x6bb4e3bb,
  761. 0xdda26a7e,0x3a59ff45,0x3e350a44,0xbcb4cdd5,0x72eacea8,0xfa6484bb,
  762. 0x8d6612ae,0xbf3c6f47,0xd29be463,0x542f5d9e,0xaec2771b,0xf64e6370,
  763. 0x740e0d8d,0xe75b1357,0xf8721671,0xaf537d5d,0x4040cb08,0x4eb4e2cc,
  764. 0x34d2466a,0x0115af84,0xe1b00428,0x95983a1d,0x06b89fb4,0xce6ea048,
  765. 0x6f3f3b82,0x3520ab82,0x011a1d4b,0x277227f8,0x611560b1,0xe7933fdc,
  766. 0xbb3a792b,0x344525bd,0xa08839e1,0x51ce794b,0x2f32c9b7,0xa01fbac9,
  767. 0xe01cc87e,0xbcc7d1f6,0xcf0111c3,0xa1e8aac7,0x1a908749,0xd44fbd9a,
  768. 0xd0dadecb,0xd50ada38,0x0339c32a,0xc6913667,0x8df9317c,0xe0b12b4f,
  769. 0xf79e59b7,0x43f5bb3a,0xf2d519ff,0x27d9459c,0xbf97222c,0x15e6fc2a,
  770. 0x0f91fc71,0x9b941525,0xfae59361,0xceb69ceb,0xc2a86459,0x12baa8d1,
  771. 0xb6c1075e,0xe3056a0c,0x10d25065,0xcb03a442,0xe0ec6e0e,0x1698db3b,
  772. 0x4c98a0be,0x3278e964,0x9f1f9532,0xe0d392df,0xd3a0342b,0x8971f21e,
  773. 0x1b0a7441,0x4ba3348c,0xc5be7120,0xc37632d8,0xdf359f8d,0x9b992f2e,
  774. 0xe60b6f47,0x0fe3f11d,0xe54cda54,0x1edad891,0xce6279cf,0xcd3e7e6f,
  775. 0x1618b166,0xfd2c1d05,0x848fd2c5,0xf6fb2299,0xf523f357,0xa6327623,
  776. 0x93a83531,0x56cccd02,0xacf08162,0x5a75ebb5,0x6e163697,0x88d273cc,
  777. 0xde966292,0x81b949d0,0x4c50901b,0x71c65614,0xe6c6c7bd,0x327a140a,
  778. 0x45e1d006,0xc3f27b9a,0xc9aa53fd,0x62a80f00,0xbb25bfe2,0x35bdd2f6,
  779. 0x71126905,0xb2040222,0xb6cbcf7c,0xcd769c2b,0x53113ec0,0x1640e3d3,
  780. 0x38abbd60,0x2547adf0,0xba38209c,0xf746ce76,0x77afa1c5,0x20756060,
  781. 0x85cbfe4e,0x8ae88dd8,0x7aaaf9b0,0x4cf9aa7e,0x1948c25c,0x02fb8a8c,
  782. 0x01c36ae4,0xd6ebe1f9,0x90d4f869,0xa65cdea0,0x3f09252d,0xc208e69f,
  783. 0xb74e6132,0xce77e25b,0x578fdfe3,0x3ac372e6
  784. };
  785. }
  786.  
  787. #endregion
  788.  
  789. #region Conversions
  790.  
  791. //gets the first byte in a uint
  792. private byte wordByte0(uint w)
  793. {
  794. return (byte)(w / 256 / 256 / 256 % 256);
  795. }
  796.  
  797. //gets the second byte in a uint
  798. private byte wordByte1(uint w)
  799. {
  800. return (byte)(w / 256 / 256 % 256);
  801. }
  802.  
  803. //gets the third byte in a uint
  804. private byte wordByte2(uint w)
  805. {
  806. return (byte)(w / 256 % 256);
  807. }
  808.  
  809. //gets the fourth byte in a uint
  810. private byte wordByte3(uint w)
  811. {
  812. return (byte)(w % 256);
  813. }
  814.  
  815. //converts a byte array to a hex string
  816. private string ByteToHex(byte[] bytes)
  817. {
  818. StringBuilder s = new StringBuilder();
  819. foreach (byte b in bytes)
  820. s.Append(b.ToString("x2"));
  821. return s.ToString();
  822. }
  823.  
  824. //converts a hex string to a byte array
  825. private byte[] HexToByte(string hex)
  826. {
  827. byte[] r = new byte[hex.Length / 2];
  828. for (int i = 0; i < hex.Length - 1; i += 2)
  829. {
  830. byte a = GetHex(hex[i]);
  831. byte b = GetHex(hex[i + 1]);
  832. r[i / 2] = (byte)(a * 16 + b);
  833. }
  834. return r;
  835. }
  836.  
  837. //converts a single hex character to it's decimal value
  838. private byte GetHex(char x)
  839. {
  840. if (x <= '9' && x >= '0')
  841. {
  842. return (byte)(x - '0');
  843. }
  844. else if (x <= 'z' && x >= 'a')
  845. {
  846. return (byte)(x - 'a' + 10);
  847. }
  848. else if (x <= 'Z' && x >= 'A')
  849. {
  850. return (byte)(x - 'A' + 10);
  851. }
  852. return 0;
  853. }
  854.  
  855. #endregion
  856. }
  857. }

  

c# BlowFish 高速 对称加密的更多相关文章

  1. 介绍对称加密的另一个算法——PBE

    除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法 ...

  2. iOS CommonCrypto 对称加密 AES ecb,cbc

    CommonCrypto 为苹果提供的系统加密接口,支持iOS 和 mac 开发: 不仅限于AES加密,提供的接口还支持其他DES,3DES,RC4,BLOWFISH等算法, 本文章主要讨论AES在i ...

  3. TEA,XXTEA介绍,对称加密

    总结:在使用加密的时候,我们可以加入随机数,这样相同的明文,每次加密后得到不同的密文,同时可以在密文中加入密文有效期,控制密文的有效时间长度. 针对有的功能扩展使用,很好的思想. TEA对 64 位数 ...

  4. 公钥password学中的素数以及对称加密

        password学.一向被人们觉得门槛非常高,特别高端...这也是实际,可是这决不意味着普通人无法了解它的精髓.对于喜欢画圆的人来讲,即便是理解了password技术背后的哪怕一点理论,也是激 ...

  5. [转]理解SSL(https)中的对称加密与非对称加密

    加密 解密 Tweet   密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母. 早期的密码学 古希腊人用一种叫 Scytale 的工具加密.更快的工具是 transposition ...

  6. java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS

    概述 java-信息安全(一)-BASE64,MD5,SHA,HMAC java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4 java-信息安全(四)-数据 ...

  7. openssl enc(对称加密)

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 对称加密工具.了解对称加密的原理后就很简单了,原理部分见下文. openss ...

  8. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  9. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

随机推荐

  1. windows里面的批处理命令不停地处理同一条命令

    最近在设置路由表的时候,为了方便,做了一个批处理 route.bat route delete 0.0.0.0route delete 10.25.0.0route ADD 10.25.0.0 MAS ...

  2. oracle 读书笔记

    1 动态sql即拼接字符串的sql,使用变量代替具体值,10万条语句可以被hash陈一个SQL_ID,可以只解析一次 for i in 1..100000 loop execute immediate ...

  3. vb小菜一枚--------早期绑定和后期绑定

    早期绑定和后期绑定 Visual Studio 2005   其他版本   将对象分配给对象变量时,Visual Basic 编译器会执行一个名为 binding 的进程.如果将对象分配给声明为特定对 ...

  4. 20145301&20145321&20145335实验五

    20145301&20145321&20145335实验五 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验五

  5. C++多态(一)

    面试题目中关于多态的问题不少,例如重载.虚函数(覆盖).多态的概念等等,这里做一个梳理,包含如下内容: 一.多态的定义 (一)定义 能够呈现不同形态的特性或状态. (二)两种多态性 1.编译时的多态性 ...

  6. hdoj 1022 Train Problem I

    #include<stdio.h> int main() { int n,i,j,k; ],]; ]; while(scanf("%d %s %s",&n,in ...

  7. Mysql创建新用户后无法登录,提示 Access denied for user 'username'@'localhost' (using password: YES)

    MySQL创建新用户后无法登录,提示 Access denied for user 'username'@'localhost' (using password: YES) ,多半是因为存在匿名用户, ...

  8. C++混合编程之idlcpp教程Python篇(5)

    上一篇在这  C++混合编程之idlcpp教程Python篇(4) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial3中,同样加入了三个文件:Py ...

  9. SVN分支管理策略个人见解

    本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更 ...

  10. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.0,完善基础功能(源码)

    (前段时间封闭式开发完了一个项目,最近才有时间继续更新GG的后续版本,对那些关注GG的朋友来说,真的是很抱歉.)GG的前面几个版本开发了一些比较高级的功能,像视频聊天.远程桌面.文件传送.远程磁盘等, ...