项目作者: cszxyang

项目描述 :
Pure Implementations for encryption algorithms including DES, RSA, AES, RC4
高级语言: Java
项目地址: git://github.com/cszxyang/cipher4j.git
创建时间: 2018-10-05T01:03:39Z
项目社区:https://github.com/cszxyang/cipher4j

开源协议:MIT License

下载


Introduction

Pure Implementations for encryption algorithms including DES, RSA, AES

Usage

Take AES Implementation for example

  1. String plaintext = "passwordTextCase", key = "simpleKeyCase123";
  2. CipherService aesService = new AESCipherService();
  3. String encryptedText = aesService.encrypt(plaintext, key);
  4. aesService.decrypt(encryptedText, key);

Output

DES

For tracing the whole process of DES encryption and decryption, encryption output:

  1. ##################### encryption #####################
  2. plaintext 01234567
  3. keyText 12345678
  4. plaintext bits 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111
  5. key bits 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000
  6. Permuted Choice 1 C0 00000000 00000000 11111111 1111
  7. Permuted Choice 1 D0 01100110 01111000 10000000 1111
  8. Start to generate sub keys......
  9. [1] leftShifting C 00000000 00000001 11111111 1110
  10. [1] leftShifting D 11001100 11110001 00000001 1110
  11. [1] concatChars 00000000 00000001 11111111 11101100 11001111 00010000 00011110
  12. [1] subKey 01010000 00101100 10101100 01010111 00101010 11000010
  13. [2] leftShifting C 00000000 00000011 11111111 1100
  14. [2] leftShifting D 10011001 11100010 00000011 1101
  15. [2] concatChars 00000000 00000011 11111111 11001001 10011110 00100000 00111101
  16. [2] subKey 01010000 10101100 10100100 01010000 10100011 01000111
  17. [3] leftShifting C 00000000 00001111 11111111 0000
  18. [3] leftShifting D 01100111 10001000 00001111 0110
  19. [3] concatChars 00000000 00001111 11111111 00000110 01111000 10000000 11110110
  20. [3] subKey 11010000 10101100 00100110 11110110 10000100 10001100
  21. [4] leftShifting C 00000000 00111111 11111100 0000
  22. [4] leftShifting D 10011110 00100000 00111101 1001
  23. [4] concatChars 00000000 00111111 11111100 00001001 11100010 00000011 11011001
  24. [4] subKey 11100000 10100110 00100110 01001000 00110111 11001011
  25. [5] leftShifting C 00000000 11111111 11110000 0000
  26. [5] leftShifting D 01111000 10000000 11110110 0110
  27. [5] concatChars 00000000 11111111 11110000 00000111 10001000 00001111 01100110
  28. [5] subKey 11100000 10010110 00100110 00111110 11110000 00101001
  29. [6] leftShifting C 00000011 11111111 11000000 0000
  30. [6] leftShifting D 11100010 00000011 11011001 1001
  31. [6] concatChars 00000011 11111111 11000000 00001110 00100000 00111101 10011001
  32. [6] subKey 11100000 10010010 01110010 01100010 01011101 01100010
  33. [7] leftShifting C 00001111 11111111 00000000 0000
  34. [7] leftShifting D 10001000 00001111 01100110 0111
  35. [7] concatChars 00001111 11111111 00000000 00001000 10000000 11110110 01100111
  36. [7] subKey 10100100 11010010 01110010 10001100 10101001 00111010
  37. [8] leftShifting C 00111111 11111100 00000000 0000
  38. [8] leftShifting D 00100000 00111101 10011001 1110
  39. [8] concatChars 00111111 11111100 00000000 00000010 00000011 11011001 10011110
  40. [8] subKey 10100110 01010011 01010010 11100101 01011110 01010000
  41. [9] leftShifting C 01111111 11111000 00000000 0000
  42. [9] leftShifting D 01000000 01111011 00110011 1100
  43. [9] concatChars 01111111 11111000 00000000 00000100 00000111 10110011 00111100
  44. [9] subKey 00100110 01010011 01010011 11001011 10011010 01000000
  45. [10] leftShifting C 11111111 11100000 00000000 0001
  46. [10] leftShifting D 00000001 11101100 11001111 0001
  47. [10] concatChars 11111111 11100000 00000000 00010000 00011110 11001100 11110001
  48. [10] subKey 00101111 01010001 01010001 11010000 11000111 00111100
  49. [11] leftShifting C 11111111 10000000 00000000 0111
  50. [11] leftShifting D 00000111 10110011 00111100 0100
  51. [11] concatChars 11111111 10000000 00000000 01110000 01111011 00110011 11000100
  52. [11] subKey 00001111 01000001 11011001 00011001 00011110 10001100
  53. [12] leftShifting C 11111110 00000000 00000001 1111
  54. [12] leftShifting D 00011110 11001100 11110001 0000
  55. [12] concatChars 11111110 00000000 00000001 11110001 11101100 11001111 00010000
  56. [12] subKey 00011111 01000001 10011001 11011000 01110000 10110001
  57. [13] leftShifting C 11111000 00000000 00000111 1111
  58. [13] leftShifting D 01111011 00110011 11000100 0000
  59. [13] concatChars 11111000 00000000 00000111 11110111 10110011 00111100 01000000
  60. [13] subKey 00011111 00001001 10001001 00100011 01101010 00101101
  61. [14] leftShifting C 11100000 00000000 00011111 1111
  62. [14] leftShifting D 11101100 11001111 00010000 0001
  63. [14] concatChars 11100000 00000000 00011111 11111110 11001100 11110001 00000001
  64. [14] subKey 00011011 00101000 10001101 10110010 00111001 10010010
  65. [15] leftShifting C 10000000 00000000 01111111 1111
  66. [15] leftShifting D 10110011 00111100 01000000 0111
  67. [15] concatChars 10000000 00000000 01111111 11111011 00110011 11000100 00000111
  68. [15] subKey 00011001 00101100 10001100 10100101 00000011 00110111
  69. [16] leftShifting C 00000000 00000000 11111111 1111
  70. [16] leftShifting D 01100110 01111000 10000000 1111
  71. [16] concatChars 00000000 00000000 11111111 11110110 01100111 10001000 00001111
  72. [16] subKey 01010001 00101100 10001100 10100111 01000011 11000000
  73. plaintext after ip 00000000 11111111 11110000 10101010 00000000 11111111 00000000 11001100
  74. L0 00000000 11111111 11110000 10101010
  75. R0 00000000 11111111 00000000 11001100
  76. [f] 32-bit input 00000000 11111111 00000000 11001100
  77. [f] Selection 00000000 00010111 11111110 10000000 00010110 01011000
  78. [f] subKey 01010000 00101100 10101100 01010111 00101010 11000010
  79. [f] xor 01010000 00111011 01010010 11010111 00111100 10011010
  80. [F] SBox 01101101 10000010 00001110 11110000
  81. [f] P Replacement 00010010 01111000 11000111 00011001
  82. [1] left 00000000 11111111 00000000 11001100
  83. [1] right 00010010 10000111 00110111 10110011
  84. [f] 32-bit input 00010010 10000111 00110111 10110011
  85. [f] Selection 10001010 01010100 00001110 10011010 11111101 10100110
  86. [f] subKey 01010000 10101100 10100100 01010000 10100011 01000111
  87. [f] xor 11011010 11111000 10101010 11001010 01011110 11100001
  88. [F] SBox 01110010 01101011 10010010 00100010
  89. [f] P Replacement 11100001 01100011 10000110 01000110
  90. [2] left 00010010 10000111 00110111 10110011
  91. [2] right 11100001 10011100 10000110 10001010
  92. [f] 32-bit input 11100001 10011100 10000110 10001010
  93. [f] Selection 01110000 00111100 11111001 01000000 11010100 01010101
  94. [f] subKey 11010000 10101100 00100110 11110110 10000100 10001100
  95. [f] xor 10100000 10010000 11011111 10110110 01010000 11011001
  96. [F] SBox 11011111 01111001 00100010 00000000
  97. [f] P Replacement 11000100 10101001 11000000 11010110
  98. [3] left 11100001 10011100 10000110 10001010
  99. [3] right 11010110 00101110 11110111 01100101
  100. [f] 32-bit input 11010110 00101110 11110111 01100101
  101. [f] Selection 11101010 11000001 01011101 01111010 11101011 00001011
  102. [f] subKey 11100000 10100110 00100110 01001000 00110111 11001011
  103. [f] xor 00001010 01100111 01111011 00110010 11011100 11000000
  104. [F] SBox 01001011 11110111 10111111 01011101
  105. [f] P Replacement 11111111 01111001 11111001 10101100
  106. [4] left 11010110 00101110 11110111 01100101
  107. [4] right 00011110 11100101 01111111 00100110
  108. [f] 32-bit input 00011110 11100101 01111111 00100110
  109. [f] Selection 00001111 11010111 00001010 10111111 11101001 00001100
  110. [f] subKey 11100000 10010110 00100110 00111110 11110000 00101001
  111. [f] xor 11101111 01000001 00101100 10000001 00011001 00100101
  112. [F] SBox 00001100 10010111 01000110 10111110
  113. [f] P Replacement 10001110 01101110 00010101 00111001
  114. [5] left 00011110 11100101 01111111 00100110
  115. [5] right 01011000 01000000 11100010 01011100
  116. [f] 32-bit input 01011000 01000000 11100010 01011100
  117. [f] Selection 00101111 00000010 00000001 01110000 01000010 11111000
  118. [f] subKey 11100000 10010010 01110010 01100010 01011101 01100010
  119. [f] xor 11001111 10010000 01110011 00010010 00011111 10011010
  120. [F] SBox 10110000 11010100 01000100 00100000
  121. [f] P Replacement 00000100 10000101 00010111 00001010
  122. [6] left 01011000 01000000 11100010 01011100
  123. [6] right 00011010 01100000 01101000 00101100
  124. [f] 32-bit input 00011010 01100000 01101000 00101100
  125. [f] Selection 00001111 01000011 00000000 00110101 00000001 01011000
  126. [f] subKey 10100100 11010010 01110010 10001100 10101001 00111010
  127. [f] xor 10101011 10010001 01110010 10111001 10101000 01100010
  128. [F] SBox 01100000 00000001 10000111 01101011
  129. [f] P Replacement 10001001 00110010 10101110 00001000
  130. [7] left 00011010 01100000 01101000 00101100
  131. [7] right 11010001 01110010 01001100 01010100
  132. [f] 32-bit input 11010001 01110010 01001100 01010100
  133. [f] Selection 01101010 00101011 10100100 00100101 10000010 10101001
  134. [f] subKey 10100110 01010011 01010010 11100101 01011110 01010000
  135. [f] xor 11001100 01111000 11110110 11000000 11011100 11111001
  136. [F] SBox 10110111 10101110 11111001 01010011
  137. [f] P Replacement 01110011 11010110 01111011 11010110
  138. [8] left 11010001 01110010 01001100 01010100
  139. [8] right 01101001 10110110 00010011 11111010
  140. [f] 32-bit input 01101001 10110110 00010011 11111010
  141. [f] Selection 00110101 00111101 10101100 00001010 01111111 11110100
  142. [f] subKey 00100110 01010011 01010011 11001011 10011010 01000000
  143. [f] xor 00010011 01101110 11111111 11000001 11100101 10110100
  144. [F] SBox 11010110 01011110 11111011 01111010
  145. [f] P Replacement 01111111 11110111 10110100 11010010
  146. [9] left 01101001 10110110 00010011 11111010
  147. [9] right 10101110 10000101 11111000 10000110
  148. [f] 32-bit input 10101110 10000101 11111000 10000110
  149. [f] Selection 01010101 11010100 00001011 11111111 00010100 00001101
  150. [f] subKey 00101111 01010001 01010001 11010000 11000111 00111100
  151. [f] xor 01111010 10000101 01011010 00101111 11010011 00110001
  152. [F] SBox 01111010 01011100 01111000 10001111
  153. [f] P Replacement 01111100 00001111 10011010 11100011
  154. [10] left 10101110 10000101 11111000 10000110
  155. [10] right 00010101 10111001 10001001 00011001
  156. [f] 32-bit input 00010101 10111001 10001001 00011001
  157. [f] Selection 10001010 10111101 11110011 11000101 00101000 11110010
  158. [f] subKey 00001111 01000001 11011001 00011001 00011110 10001100
  159. [f] xor 10000101 11111100 00101010 11011100 00110110 01111110
  160. [F] SBox 11110101 10111011 10011111 00101000
  161. [f] P Replacement 10111101 11100000 11100111 01011110
  162. [11] left 00010101 10111001 10001001 00011001
  163. [11] right 00010011 01100101 00011111 11011000
  164. [f] 32-bit input 00010011 01100101 00011111 11011000
  165. [f] Selection 00001010 01101011 00001010 10001111 11111110 11110000
  166. [f] subKey 00011111 01000001 10011001 11011000 01110000 10110001
  167. [f] xor 00010101 00101010 10010011 01010111 10001110 01000001
  168. [F] SBox 01110111 11110111 11110001 11100001
  169. [f] P Replacement 11100101 01010101 11111111 10010111
  170. [12] left 00010011 01100101 00011111 11011000
  171. [12] right 11110000 11101100 01110110 10001110
  172. [f] 32-bit input 11110000 11101100 01110110 10001110
  173. [f] Selection 01111010 00010111 01011000 00111010 11010100 01011101
  174. [f] subKey 00011111 00001001 10001001 00100011 01101010 00101101
  175. [f] xor 01100101 00011110 11010001 00011001 10111110 01110000
  176. [F] SBox 10011100 01010100 00011011 11100000
  177. [f] P Replacement 00110100 10111001 00110100 00010011
  178. [13] left 11110000 11101100 01110110 10001110
  179. [13] right 00100111 11011100 00101011 11001011
  180. [f] 32-bit input 00100111 11011100 00101011 11001011
  181. [f] Selection 10010000 11111110 11111000 00010101 01111110 01010110
  182. [f] subKey 00011011 00101000 10001101 10110010 00111001 10010010
  183. [f] xor 10001011 11010110 01110101 10100111 01000111 11000100
  184. [F] SBox 00011110 11000101 00010100 01101000
  185. [f] P Replacement 11101000 00011001 00010101 00011010
  186. [14] left 00100111 11011100 00101011 11001011
  187. [14] right 00011000 11110101 01100011 10010100
  188. [f] 32-bit input 00011000 11110101 01100011 10010100
  189. [f] Selection 00001111 00010111 10101010 10110000 01111100 10101000
  190. [f] subKey 00011001 00101100 10001100 10100101 00000011 00110111
  191. [f] xor 00010110 00111011 00100110 00010101 01111111 10011111
  192. [F] SBox 01111000 00110000 00101110 00100010
  193. [f] P Replacement 00010100 00101010 10000110 10001110
  194. [15] left 00011000 11110101 01100011 10010100
  195. [15] right 00110011 11110110 10101101 01000101
  196. [f] 32-bit input 00110011 11110110 10101101 01000101
  197. [f] Selection 10011010 01111111 10101101 01010101 10101010 00001010
  198. [f] subKey 01010001 00101100 10001100 10100111 01000011 11000000
  199. [f] xor 11001011 01010011 00100001 11110010 11101001 11001010
  200. [F] SBox 11000111 11110011 00000011 10001111
  201. [f] P Replacement 11001100 11100011 11101001 00110101
  202. [16] left 00110011 11110110 10101101 01000101
  203. [16] right 11010100 00010110 10001010 10100001
  204. encryptedText bits 10001011 10110100 01111010 00001100 11110000 10101001 01100010 01101101
  205. encryptedText i7R6DPCpYm0=

decryption output

  1. ##################### decryption #####################
  2. encryptedText i7R6DPCpYm0=
  3. key 12345678
  4. Permuted Choice 1 C0 00000000 00000000 11111111 1111
  5. Permuted Choice 1 D0 01100110 01111000 10000000 1111
  6. Start to generate sub keys......
  7. [1] leftShifting C 00000000 00000001 11111111 1110
  8. [1] leftShifting D 11001100 11110001 00000001 1110
  9. [1] concatChars 00000000 00000001 11111111 11101100 11001111 00010000 00011110
  10. [1] subKey 01010000 00101100 10101100 01010111 00101010 11000010
  11. [2] leftShifting C 00000000 00000011 11111111 1100
  12. [2] leftShifting D 10011001 11100010 00000011 1101
  13. [2] concatChars 00000000 00000011 11111111 11001001 10011110 00100000 00111101
  14. [2] subKey 01010000 10101100 10100100 01010000 10100011 01000111
  15. [3] leftShifting C 00000000 00001111 11111111 0000
  16. [3] leftShifting D 01100111 10001000 00001111 0110
  17. [3] concatChars 00000000 00001111 11111111 00000110 01111000 10000000 11110110
  18. [3] subKey 11010000 10101100 00100110 11110110 10000100 10001100
  19. [4] leftShifting C 00000000 00111111 11111100 0000
  20. [4] leftShifting D 10011110 00100000 00111101 1001
  21. [4] concatChars 00000000 00111111 11111100 00001001 11100010 00000011 11011001
  22. [4] subKey 11100000 10100110 00100110 01001000 00110111 11001011
  23. [5] leftShifting C 00000000 11111111 11110000 0000
  24. [5] leftShifting D 01111000 10000000 11110110 0110
  25. [5] concatChars 00000000 11111111 11110000 00000111 10001000 00001111 01100110
  26. [5] subKey 11100000 10010110 00100110 00111110 11110000 00101001
  27. [6] leftShifting C 00000011 11111111 11000000 0000
  28. [6] leftShifting D 11100010 00000011 11011001 1001
  29. [6] concatChars 00000011 11111111 11000000 00001110 00100000 00111101 10011001
  30. [6] subKey 11100000 10010010 01110010 01100010 01011101 01100010
  31. [7] leftShifting C 00001111 11111111 00000000 0000
  32. [7] leftShifting D 10001000 00001111 01100110 0111
  33. [7] concatChars 00001111 11111111 00000000 00001000 10000000 11110110 01100111
  34. [7] subKey 10100100 11010010 01110010 10001100 10101001 00111010
  35. [8] leftShifting C 00111111 11111100 00000000 0000
  36. [8] leftShifting D 00100000 00111101 10011001 1110
  37. [8] concatChars 00111111 11111100 00000000 00000010 00000011 11011001 10011110
  38. [8] subKey 10100110 01010011 01010010 11100101 01011110 01010000
  39. [9] leftShifting C 01111111 11111000 00000000 0000
  40. [9] leftShifting D 01000000 01111011 00110011 1100
  41. [9] concatChars 01111111 11111000 00000000 00000100 00000111 10110011 00111100
  42. [9] subKey 00100110 01010011 01010011 11001011 10011010 01000000
  43. [10] leftShifting C 11111111 11100000 00000000 0001
  44. [10] leftShifting D 00000001 11101100 11001111 0001
  45. [10] concatChars 11111111 11100000 00000000 00010000 00011110 11001100 11110001
  46. [10] subKey 00101111 01010001 01010001 11010000 11000111 00111100
  47. [11] leftShifting C 11111111 10000000 00000000 0111
  48. [11] leftShifting D 00000111 10110011 00111100 0100
  49. [11] concatChars 11111111 10000000 00000000 01110000 01111011 00110011 11000100
  50. [11] subKey 00001111 01000001 11011001 00011001 00011110 10001100
  51. [12] leftShifting C 11111110 00000000 00000001 1111
  52. [12] leftShifting D 00011110 11001100 11110001 0000
  53. [12] concatChars 11111110 00000000 00000001 11110001 11101100 11001111 00010000
  54. [12] subKey 00011111 01000001 10011001 11011000 01110000 10110001
  55. [13] leftShifting C 11111000 00000000 00000111 1111
  56. [13] leftShifting D 01111011 00110011 11000100 0000
  57. [13] concatChars 11111000 00000000 00000111 11110111 10110011 00111100 01000000
  58. [13] subKey 00011111 00001001 10001001 00100011 01101010 00101101
  59. [14] leftShifting C 11100000 00000000 00011111 1111
  60. [14] leftShifting D 11101100 11001111 00010000 0001
  61. [14] concatChars 11100000 00000000 00011111 11111110 11001100 11110001 00000001
  62. [14] subKey 00011011 00101000 10001101 10110010 00111001 10010010
  63. [15] leftShifting C 10000000 00000000 01111111 1111
  64. [15] leftShifting D 10110011 00111100 01000000 0111
  65. [15] concatChars 10000000 00000000 01111111 11111011 00110011 11000100 00000111
  66. [15] subKey 00011001 00101100 10001100 10100101 00000011 00110111
  67. [16] leftShifting C 00000000 00000000 11111111 1111
  68. [16] leftShifting D 01100110 01111000 10000000 1111
  69. [16] concatChars 00000000 00000000 11111111 11110110 01100111 10001000 00001111
  70. [16] subKey 01010001 00101100 10001100 10100111 01000011 11000000
  71. plaintext after ip 11010100 00010110 10001010 10100001 00110011 11110110 10101101 01000101
  72. L0 11010100 00010110 10001010 10100001
  73. R0 00110011 11110110 10101101 01000101
  74. [f] 32-bit input 00110011 11110110 10101101 01000101
  75. [f] Selection 10011010 01111111 10101101 01010101 10101010 00001010
  76. [f] subKey 01010001 00101100 10001100 10100111 01000011 11000000
  77. [f] xor 11001011 01010011 00100001 11110010 11101001 11001010
  78. [F] SBox 11000111 11110011 00000011 10001111
  79. [f] P Replacement 11001100 11100011 11101001 00110101
  80. [1] left 00110011 11110110 10101101 01000101
  81. [1] right 00011000 11110101 01100011 10010100
  82. [f] 32-bit input 00011000 11110101 01100011 10010100
  83. [f] Selection 00001111 00010111 10101010 10110000 01111100 10101000
  84. [f] subKey 00011001 00101100 10001100 10100101 00000011 00110111
  85. [f] xor 00010110 00111011 00100110 00010101 01111111 10011111
  86. [F] SBox 01111000 00110000 00101110 00100010
  87. [f] P Replacement 00010100 00101010 10000110 10001110
  88. [2] left 00011000 11110101 01100011 10010100
  89. [2] right 00100111 11011100 00101011 11001011
  90. [f] 32-bit input 00100111 11011100 00101011 11001011
  91. [f] Selection 10010000 11111110 11111000 00010101 01111110 01010110
  92. [f] subKey 00011011 00101000 10001101 10110010 00111001 10010010
  93. [f] xor 10001011 11010110 01110101 10100111 01000111 11000100
  94. [F] SBox 00011110 11000101 00010100 01101000
  95. [f] P Replacement 11101000 00011001 00010101 00011010
  96. [3] left 00100111 11011100 00101011 11001011
  97. [3] right 11110000 11101100 01110110 10001110
  98. [f] 32-bit input 11110000 11101100 01110110 10001110
  99. [f] Selection 01111010 00010111 01011000 00111010 11010100 01011101
  100. [f] subKey 00011111 00001001 10001001 00100011 01101010 00101101
  101. [f] xor 01100101 00011110 11010001 00011001 10111110 01110000
  102. [F] SBox 10011100 01010100 00011011 11100000
  103. [f] P Replacement 00110100 10111001 00110100 00010011
  104. [4] left 11110000 11101100 01110110 10001110
  105. [4] right 00010011 01100101 00011111 11011000
  106. [f] 32-bit input 00010011 01100101 00011111 11011000
  107. [f] Selection 00001010 01101011 00001010 10001111 11111110 11110000
  108. [f] subKey 00011111 01000001 10011001 11011000 01110000 10110001
  109. [f] xor 00010101 00101010 10010011 01010111 10001110 01000001
  110. [F] SBox 01110111 11110111 11110001 11100001
  111. [f] P Replacement 11100101 01010101 11111111 10010111
  112. [5] left 00010011 01100101 00011111 11011000
  113. [5] right 00010101 10111001 10001001 00011001
  114. [f] 32-bit input 00010101 10111001 10001001 00011001
  115. [f] Selection 10001010 10111101 11110011 11000101 00101000 11110010
  116. [f] subKey 00001111 01000001 11011001 00011001 00011110 10001100
  117. [f] xor 10000101 11111100 00101010 11011100 00110110 01111110
  118. [F] SBox 11110101 10111011 10011111 00101000
  119. [f] P Replacement 10111101 11100000 11100111 01011110
  120. [6] left 00010101 10111001 10001001 00011001
  121. [6] right 10101110 10000101 11111000 10000110
  122. [f] 32-bit input 10101110 10000101 11111000 10000110
  123. [f] Selection 01010101 11010100 00001011 11111111 00010100 00001101
  124. [f] subKey 00101111 01010001 01010001 11010000 11000111 00111100
  125. [f] xor 01111010 10000101 01011010 00101111 11010011 00110001
  126. [F] SBox 01111010 01011100 01111000 10001111
  127. [f] P Replacement 01111100 00001111 10011010 11100011
  128. [7] left 10101110 10000101 11111000 10000110
  129. [7] right 01101001 10110110 00010011 11111010
  130. [f] 32-bit input 01101001 10110110 00010011 11111010
  131. [f] Selection 00110101 00111101 10101100 00001010 01111111 11110100
  132. [f] subKey 00100110 01010011 01010011 11001011 10011010 01000000
  133. [f] xor 00010011 01101110 11111111 11000001 11100101 10110100
  134. [F] SBox 11010110 01011110 11111011 01111010
  135. [f] P Replacement 01111111 11110111 10110100 11010010
  136. [8] left 01101001 10110110 00010011 11111010
  137. [8] right 11010001 01110010 01001100 01010100
  138. [f] 32-bit input 11010001 01110010 01001100 01010100
  139. [f] Selection 01101010 00101011 10100100 00100101 10000010 10101001
  140. [f] subKey 10100110 01010011 01010010 11100101 01011110 01010000
  141. [f] xor 11001100 01111000 11110110 11000000 11011100 11111001
  142. [F] SBox 10110111 10101110 11111001 01010011
  143. [f] P Replacement 01110011 11010110 01111011 11010110
  144. [9] left 11010001 01110010 01001100 01010100
  145. [9] right 00011010 01100000 01101000 00101100
  146. [f] 32-bit input 00011010 01100000 01101000 00101100
  147. [f] Selection 00001111 01000011 00000000 00110101 00000001 01011000
  148. [f] subKey 10100100 11010010 01110010 10001100 10101001 00111010
  149. [f] xor 10101011 10010001 01110010 10111001 10101000 01100010
  150. [F] SBox 01100000 00000001 10000111 01101011
  151. [f] P Replacement 10001001 00110010 10101110 00001000
  152. [10] left 00011010 01100000 01101000 00101100
  153. [10] right 01011000 01000000 11100010 01011100
  154. [f] 32-bit input 01011000 01000000 11100010 01011100
  155. [f] Selection 00101111 00000010 00000001 01110000 01000010 11111000
  156. [f] subKey 11100000 10010010 01110010 01100010 01011101 01100010
  157. [f] xor 11001111 10010000 01110011 00010010 00011111 10011010
  158. [F] SBox 10110000 11010100 01000100 00100000
  159. [f] P Replacement 00000100 10000101 00010111 00001010
  160. [11] left 01011000 01000000 11100010 01011100
  161. [11] right 00011110 11100101 01111111 00100110
  162. [f] 32-bit input 00011110 11100101 01111111 00100110
  163. [f] Selection 00001111 11010111 00001010 10111111 11101001 00001100
  164. [f] subKey 11100000 10010110 00100110 00111110 11110000 00101001
  165. [f] xor 11101111 01000001 00101100 10000001 00011001 00100101
  166. [F] SBox 00001100 10010111 01000110 10111110
  167. [f] P Replacement 10001110 01101110 00010101 00111001
  168. [12] left 00011110 11100101 01111111 00100110
  169. [12] right 11010110 00101110 11110111 01100101
  170. [f] 32-bit input 11010110 00101110 11110111 01100101
  171. [f] Selection 11101010 11000001 01011101 01111010 11101011 00001011
  172. [f] subKey 11100000 10100110 00100110 01001000 00110111 11001011
  173. [f] xor 00001010 01100111 01111011 00110010 11011100 11000000
  174. [F] SBox 01001011 11110111 10111111 01011101
  175. [f] P Replacement 11111111 01111001 11111001 10101100
  176. [13] left 11010110 00101110 11110111 01100101
  177. [13] right 11100001 10011100 10000110 10001010
  178. [f] 32-bit input 11100001 10011100 10000110 10001010
  179. [f] Selection 01110000 00111100 11111001 01000000 11010100 01010101
  180. [f] subKey 11010000 10101100 00100110 11110110 10000100 10001100
  181. [f] xor 10100000 10010000 11011111 10110110 01010000 11011001
  182. [F] SBox 11011111 01111001 00100010 00000000
  183. [f] P Replacement 11000100 10101001 11000000 11010110
  184. [14] left 11100001 10011100 10000110 10001010
  185. [14] right 00010010 10000111 00110111 10110011
  186. [f] 32-bit input 00010010 10000111 00110111 10110011
  187. [f] Selection 10001010 01010100 00001110 10011010 11111101 10100110
  188. [f] subKey 01010000 10101100 10100100 01010000 10100011 01000111
  189. [f] xor 11011010 11111000 10101010 11001010 01011110 11100001
  190. [F] SBox 01110010 01101011 10010010 00100010
  191. [f] P Replacement 11100001 01100011 10000110 01000110
  192. [15] left 00010010 10000111 00110111 10110011
  193. [15] right 00000000 11111111 00000000 11001100
  194. [f] 32-bit input 00000000 11111111 00000000 11001100
  195. [f] Selection 00000000 00010111 11111110 10000000 00010110 01011000
  196. [f] subKey 01010000 00101100 10101100 01010111 00101010 11000010
  197. [f] xor 01010000 00111011 01010010 11010111 00111100 10011010
  198. [F] SBox 01101101 10000010 00001110 11110000
  199. [f] P Replacement 00010010 01111000 11000111 00011001
  200. [16] left 00000000 11111111 00000000 11001100
  201. [16] right 00000000 11111111 11110000 10101010
  202. encryptedText bits 10001011 10110100 01111010 00001100 11110000 10101001 01100010 01101101
  203. key bits 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000
  204. decryptedText bits 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111
  205. decrypt plaintext text 01234567

convenient and fun offering with GUI



AES

The output of AES encryption and decryption process

  1. ##################### encryption #####################
  2. plaintext text passwordTextCase
  3. key text simpleKeyCase123
  4. initial plaintext state 70617373776f72645465787443617365
  5. initial key state 73696d706c654b657943617365313233
  6. RoundKeys
  7. [RoundKey 1] 73696d706c654b657943617365313233
  8. [RoundKey 2] b54aae3dd92fe558a06c842bc55db618
  9. [RoundKey 3] fb04039b222be6c3824762e8471ad4f0
  10. [RoundKey 4] 5d4c8f3b7f6769f8fd200b10ba3adfe0
  11. [RoundKey 5] d5d26ecfaab5073757950c27edafd3c7
  12. [RoundKey 6] bcb4a89a1601afad4194a38aac3b704d
  13. [RoundKey 7] 7ee54b0b68e4e4a62970472c854b3761
  14. [RoundKey 8] 8d7fa49ce59b403acceb071649a03077
  15. [RoundKey 9] ed7b51a708e0119dc40b168b8dab26fc
  16. [RoundKey 10] 948ce1fa9c6cf0675867e6ecd5ccc010
  17. [RoundKey 11] e9362bf9755adb9e2d3d3d72f8f1fd62
  18. N = 1
  19. SubBytes 7b30727baf67127cd8f7d4c5f75383b1
  20. ShiftRows 7b67d4b1aff7837bd853727cf73012c5
  21. MixColumns 3a636747bfbfc8685094ebaa7264b7b1
  22. RoundKey b54aae3dd92fe558a06c842bc55db618
  23. AddRoundKeys 8f29c97a66902d30f0f86f81b73901a9
  24. N = 2
  25. SubBytes 73a5ddda3360d8048c41a80ca9127cd3
  26. ShiftRows 7360a8d333417cda8c12dd04a9a5d80c
  27. MixColumns 3d8336e003efffc7ecd033486987b385
  28. RoundKey fb04039b222be6c3824762e8471ad4f0
  29. AddRoundKeys c687357b21c419046e9751a02e9d6775
  30. N = 3
  31. SubBytes b4179621fd1cd4f29f88d1e0315e859d
  32. ShiftRows b41cd19dfd8885219f5e96f23117d4e0
  33. MixColumns 1b79ad2bc6430753a370fb8d6f98ae4b
  34. RoundKey 5d4c8f3b7f6769f8fd200b10ba3adfe0
  35. AddRoundKeys 46352210b9246eab5e50f09dd5a271ab
  36. N = 4
  37. SubBytes 5a9693ca56369f6258538c5e033aa362
  38. ShiftRows 5a368c625653a3ca583a936203969f5e
  39. MixColumns 00dbc99030c41d850fe0f98566d052b0
  40. RoundKey d5d26ecfaab5073757950c27edafd3c7
  41. AddRoundKeys d509a75f9a711ab25875f5a28b7f8177
  42. N = 5
  43. SubBytes 03015ccfb8a3a2376a9de63a3dd20cf5
  44. ShiftRows 03a3e6f5b89d0ccf6ad25c373d01a23a
  45. MixColumns eb9a73b1144277c7d206595ee1f82d90
  46. RoundKey bcb4a89a1601afad4194a38aac3b704d
  47. AddRoundKeys 572edb2b0243d86a9392fad44dc35ddd
  48. N = 6
  49. SubBytes 5b31b9f1771a6102dc4f2d48e32e4cc1
  50. ShiftRows 5b1a2dc1774f4cf1dc2eb902e3316148
  51. MixColumns 74d9434382cca8636a529deca76ac8fe
  52. RoundKey 7ee54b0b68e4e4a62970472c854b3761
  53. AddRoundKeys 0a3c0848ea284cc54322dac02221ff9f
  54. N = 7
  55. SubBytes 67eb3052873429a61a9357ba93fd16db
  56. ShiftRows 673457db879316521afd30a693eb29ba
  57. MixColumns 1e2d8b67ffd2ceb3be0d76b4889fff03
  58. RoundKey 8d7fa49ce59b403acceb071649a03077
  59. AddRoundKeys 93522ffb1a498e8972e671a2c13fcf74
  60. N = 8
  61. SubBytes dc00150fa23b19a7408ea33a78758a92
  62. ShiftRows dc3ba392a28e8a0f407515a77800193a
  63. MixColumns dfc617d8532f32e7ad32edf5d36904e5
  64. RoundKey ed7b51a708e0119dc40b168b8dab26fc
  65. AddRoundKeys 32bd467f5bcf237a6939fb7e5ec22219
  66. N = 9
  67. SubBytes 237a5ad2398a26daf9120ff3582593d4
  68. ShiftRows 238a0fd4391293d2f9255ada587a26f3
  69. MixColumns 18e9d05305617b7506871dc0eb356049
  70. RoundKey 948ce1fa9c6cf0675867e6ecd5ccc010
  71. AddRoundKeys 8c6531a9990d8b125ee0fb2c3ef9a059
  72. N = 10
  73. SubBytes 644dc7d3eed73dc958e10f71b299e0cb
  74. ShiftRows 64d70fcbeee1e0d35899c7c9b24d3d71
  75. RoundKey e9362bf9755adb9e2d3d3d72f8f1fd62
  76. AddRoundKeys 8de124329bbb3b4d75a4fabb4abcc013
  77. encrypted text jeEkMpu7O011pPq7SrzAEw==
  78. ##################### decryption #####################
  79. encrypted text jeEkMpu7O011pPq7SrzAEw==
  80. key text simpleKeyCase123
  81. initial encrypted state 8de124329bbb3b4d75a4fabb4abcc013
  82. initial key state 73696d706c654b657943617365313233
  83. RoundKeys
  84. [RoundKey 1] 73696d706c654b657943617365313233
  85. [RoundKey 2] b54aae3dd92fe558a06c842bc55db618
  86. [RoundKey 3] fb04039b222be6c3824762e8471ad4f0
  87. [RoundKey 4] 5d4c8f3b7f6769f8fd200b10ba3adfe0
  88. [RoundKey 5] d5d26ecfaab5073757950c27edafd3c7
  89. [RoundKey 6] bcb4a89a1601afad4194a38aac3b704d
  90. [RoundKey 7] 7ee54b0b68e4e4a62970472c854b3761
  91. [RoundKey 8] 8d7fa49ce59b403acceb071649a03077
  92. [RoundKey 9] ed7b51a708e0119dc40b168b8dab26fc
  93. [RoundKey 10] 948ce1fa9c6cf0675867e6ecd5ccc010
  94. [RoundKey 11] e9362bf9755adb9e2d3d3d72f8f1fd62
  95. inverse roundKeys
  96. [RoundKey 1] e9362bf9755adb9e2d3d3d72f8f1fd62
  97. [RoundKey 2] 708e03febe111cd46ee2ba036852f407
  98. [RoundKey 3] 513f2d23ce9f1f2ad0f3a6d706b04e04
  99. [RoundKey 4] 16b3b0df9fa032091e6cb9fdd643e8d3
  100. [RoundKey 5] de6e462d891382d681cc8bf4c82f512e
  101. [RoundKey 6] 0dc56d9f577dc4fb08df092249e3dada
  102. [RoundKey 7] e0240c6e5ab8a9645fa2cdd9413cd3f8
  103. [RoundKey 8] e0ec63caba9ca50a051a64bd1e9e1e21
  104. [RoundKey 9] a13297635a70c6c0bf86c1b71b847a9c
  105. [RoundKey 10] 1d7fded0fb4251a3e5f60777a402bb2b
  106. [RoundKey 11] 73696d706c654b657943617365313233
  107. N = 1
  108. SubBytes 8c0dfb5999e0a0a95ef931123e658b2c
  109. ShiftRows 8c6531a9990d8b125ee0fb2c3ef9a059
  110. MixColumns 53040c2a87038f0697c7e0d93028d2f4
  111. RoundKey 708e03febe111cd46ee2ba036852f407
  112. AddRoundKeys 238a0fd4391293d2f9255ada587a26f3
  113. N = 2
  114. SubBytes 32cffb195b39227f69c2467a5ebd237e
  115. ShiftRows 32bd467f5bcf237a6939fb7e5ec22219
  116. MixColumns 8d048eb16c1195259086b3707eb0573e
  117. RoundKey 513f2d23ce9f1f2ad0f3a6d706b04e04
  118. AddRoundKeys dc3ba392a28e8a0f407515a77800193a
  119. N = 3
  120. SubBytes 934971741ae6cffb723f2f89c1528ea2
  121. ShiftRows 93522ffb1a498e8972e671a2c13fcf74
  122. MixColumns 7187e7041833245b0491895b45a8c169
  123. RoundKey 16b3b0df9fa032091e6cb9fdd643e8d3
  124. AddRoundKeys 673457db879316521afd30a693eb29ba
  125. N = 4
  126. SubBytes 0a28da9fea22ff48432108c5223c4cc0
  127. ShiftRows 0a3c0848ea284cc54322dac02221ff9f
  128. MixColumns 85746becfe5cce275de232f62b1e3066
  129. RoundKey de6e462d891382d681cc8bf4c82f512e
  130. AddRoundKeys 5b1a2dc1774f4cf1dc2eb902e3316148
  131. N = 5
  132. SubBytes 5743fadd02925d2b93c3db6a4d2ed8d4
  133. ShiftRows 572edb2b0243d86a9392fad44dc35ddd
  134. MixColumns 0e668b6aefe0c834620d551574e278e0
  135. RoundKey 0dc56d9f577dc4fb08df092249e3dada
  136. AddRoundKeys 03a3e6f5b89d0ccf6ad25c373d01a23a
  137. N = 6
  138. SubBytes d571f5779a75815f587fa7b28b091aa2
  139. ShiftRows d509a75f9a711ab25875f5a28b7f8177
  140. MixColumns ba12800c0ceb0aae07985ebb42aa4ca6
  141. RoundKey e0240c6e5ab8a9645fa2cdd9413cd3f8
  142. AddRoundKeys 5a368c625653a3ca583a936203969f5e
  143. N = 7
  144. SubBytes 4624f0abb95071105ea222abd5356e9d
  145. ShiftRows 46352210b9246eab5e50f09dd5a271ab
  146. MixColumns 54f0b2574714202b9a44f24f2f89cac1
  147. RoundKey e0ec63caba9ca50a051a64bd1e9e1e21
  148. AddRoundKeys b41cd19dfd8885219f5e96f23117d4e0
  149. N = 8
  150. SubBytes c6c451752197677b6e9d35042e8719a0
  151. ShiftRows c687357b21c419046e9751a02e9d6775
  152. MixColumns d2523fb06931ba1a33941cb3b221a290
  153. RoundKey a13297635a70c6c0bf86c1b71b847a9c
  154. AddRoundKeys 7360a8d333417cda8c12dd04a9a5d80c
  155. N = 9
  156. SubBytes 8f906fa966f8017af039c930b7292d81
  157. ShiftRows 8f29c97a66902d30f0f86f81b73901a9
  158. MixColumns 66180a6154b5d2d83da5750b5332a9ee
  159. RoundKey 1d7fded0fb4251a3e5f60777a402bb2b
  160. AddRoundKeys 7b67d4b1aff7837bd853727cf73012c5
  161. N = 10
  162. SubBytes 030a19561b2641032d501e0126083907
  163. ShiftRows 03081e031b0a39012d26190726504156
  164. RoundKey 73696d706c654b657943617365313233
  165. AddRoundKeys 70617373776f72645465787443617365
  166. plaintext passwordTextCase

DES Differential Cryptanalysis

  1. package org.jordon.security.attack.cryptanalysis;
  2. import org.jordon.security.constant.DESConstants;
  3. import org.jordon.security.util.ArrayUtil;
  4. public class DESDifferential {
  5. // 输入差分
  6. private short inputDiff;
  7. public DESDifferential(short inputDiff) {
  8. this.inputDiff = inputDiff;
  9. }
  10. /**
  11. * differential cryptanalysis
  12. */
  13. public void analyze() {
  14. // 选定输入查分为000001
  15. short[][] diffPairs = genDiffInputPairs(inputDiff);
  16. if (diffPairs != null) {
  17. printPairs(diffPairs);
  18. // 经过S盒子
  19. System.out.println("\n输出差分");
  20. StringBuilder[] builders = new StringBuilder[16];
  21. for (int i = 0; i < builders.length; i++) {
  22. builders[i] = new StringBuilder();
  23. }
  24. for (int i = 1; i <= diffPairs.length; i++) {
  25. short s = (short) (sub(getBinStr(diffPairs[i - 1][0])) ^ sub(getBinStr(diffPairs[i - 1][1])));
  26. String symbol = i % 8 == 0 ? "\n" : " ";
  27. System.out.print(getOutput(s) + symbol);
  28. builders[s].append(getOutput(s)).append(" ");
  29. }
  30. System.out.println("\n差分输出分布");
  31. for (int i = 0; i < builders.length; i++){
  32. ArrayUtil.printInfo(getOutput((short) i), builders[i].toString(), false);
  33. }
  34. }
  35. }
  36. // 格式化获取输出差分
  37. private String getOutput(short output) {
  38. if (output == 0) {
  39. return "0000";
  40. }else if (output == 1) {
  41. return "0001";
  42. }
  43. return Integer.toBinaryString((output & 0b1111) + 0b10000).substring(1, 5);
  44. }
  45. // S盒替代
  46. private short sub(String val) {
  47. char[] chars = val.toCharArray();
  48. char[] rowBits = {
  49. chars[0],
  50. chars[5]
  51. };
  52. char[] columnBits = {
  53. chars[1], chars[2],
  54. chars[3], chars[4]
  55. };
  56. int rowIndex = Integer.parseInt(String.valueOf(rowBits), 2);
  57. int columnIndex = Integer.parseInt(String.valueOf(columnBits), 2);
  58. // (3) obtain output of Si
  59. return DESConstants.SUBSTITUTE_BOX[0][rowIndex][columnIndex];
  60. }
  61. /**
  62. * 根据指定输入差分,生成所有明文输入对
  63. */
  64. private short[][] genDiffInputPairs(short inputDiff) {
  65. // 2^6
  66. System.out.println("输入差分:" + getBinStr(inputDiff));
  67. if (inputDiff >= 0x00 && inputDiff <= 0x0f) {
  68. short[] pair = {0, inputDiff};
  69. short[][] pairs = new short[64][2];
  70. pairs[0] = pair;
  71. for (short i = 1; i < 64; i++) {
  72. pairs[i] = new short[]{i, (short) (i ^ inputDiff)};
  73. }
  74. return pairs;
  75. }
  76. return null;
  77. }
  78. // 打印输入对
  79. private void printPairs(short[][] pairs) {
  80. System.out.println("\n输入对");
  81. for (int i = 1; i <= pairs.length; i++) {
  82. String symbol = i % 8 == 0 ? "\n" : " ";
  83. System.out.print("(" + getBinStr(pairs[i - 1][0]) +
  84. "," + getBinStr(pairs[i - 1][1]) + ")" + symbol);
  85. }
  86. }
  87. // 格式化S盒输入
  88. private String getBinStr(short val) {
  89. if (val == 0) {
  90. return "000000";
  91. }else if (val == 1) {
  92. return "000001";
  93. }
  94. return Integer.toBinaryString((val & 0b111111) + 0b1000000).substring(1, 7);
  95. }
  96. }

outputing all the input pairs of the differential input and corresponding differential distribution

  1. 输入差分:000001
  2. 输入对
  3. (000000,000001) (000001,000000) (000010,000011) (000011,000010) (000100,000101) (000101,000100) (000110,000111) (000111,000110)
  4. (001000,001001) (001001,001000) (001010,001011) (001011,001010) (001100,001101) (001101,001100) (001110,001111) (001111,001110)
  5. (010000,010001) (010001,010000) (010010,010011) (010011,010010) (010100,010101) (010101,010100) (010110,010111) (010111,010110)
  6. (011000,011001) (011001,011000) (011010,011011) (011011,011010) (011100,011101) (011101,011100) (011110,011111) (011111,011110)
  7. (100000,100001) (100001,100000) (100010,100011) (100011,100010) (100100,100101) (100101,100100) (100110,100111) (100111,100110)
  8. (101000,101001) (101001,101000) (101010,101011) (101011,101010) (101100,101101) (101101,101100) (101110,101111) (101111,101110)
  9. (110000,110001) (110001,110000) (110010,110011) (110011,110010) (110100,110101) (110101,110100) (110110,110111) (110111,110110)
  10. (111000,111001) (111001,111000) (111010,111011) (111011,111010) (111100,111101) (111101,111100) (111110,111111) (111111,111110)
  11. 输出差分
  12. 1110 1110 1011 1011 1010 1010 0101 0101
  13. 1100 1100 1101 1101 0110 0110 1001 1001
  14. 1001 1001 1100 1100 1010 1010 0111 0111
  15. 1100 1100 1100 1100 0011 0011 1111 1111
  16. 1011 1011 1101 1101 0110 0110 1010 1010
  17. 1001 1001 1111 1111 0011 0011 1100 1100
  18. 1010 1010 0111 0111 1010 1010 1001 1001
  19. 1001 1001 1010 1010 0011 0011 1101 1101
  20. 差分输出分布
  21. 0000
  22. 0001
  23. 0010
  24. 0011 0011 0011 0011 0011 0011 0011
  25. 0100
  26. 0101 0101 0101
  27. 0110 0110 0110 0110 0110
  28. 0111 0111 0111 0111 0111
  29. 1000
  30. 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001
  31. 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010
  32. 1011 1011 1011 1011 1011
  33. 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100
  34. 1101 1101 1101 1101 1101 1101 1101
  35. 1110 1110 1110
  36. 1111 1111 1111 1111 1111

RSA

encrypt and decrypt big data

  1. public = 65537
  2. private = 78525902072320391608737916884640910364505357174525590710167120993759405509547140594627878863225003441361395545158796231923361941968429447718551660867382833237960574251865474859924434185132857131903215178186236747385107077061523018585463899345444036005905759639826169641884190715470009961170662302049779058113
  3. modulus = 111123511057904247384303352454411628574852901907645613196843638982726078745879922118460167927517210453802508633681810948599960519752655050853574023973606618611715320478128088434295076817222464874390543837050033282496413714543565095232472865740444355218882825770580971590396819382161816782243359703760806220343
  4. message = 64817416795314078589627041975736817397997584028795185521897274181295008592767171589585106415811184609379911184733318659651706555695848036601359747359521829105599014520845612387012461222627857364612289243289267763784602632108473742072081572298228631598483984218130386362800051626492833278994468945333676583030
  5. encrypted = 67902482420062658281496748456690089583528632570276215918392904236166977373756787220355016586353876542515948791235556706391024025337777674873358863284240161449718904162441130678507273673627624342258514489584294519298979557329482563284543751683385911800817642057923152429340572932972532657573862337149437977501
  6. decrypted = 64817416795314078589627041975736817397997584028795185521897274181295008592767171589585106415811184609379911184733318659651706555695848036601359747359521829105599014520845612387012461222627857364612289243289267763784602632108473742072081572298228631598483984218130386362800051626492833278994468945333676583030

Simple GUI of RSA crypto


Details