Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. private static string EncryptPassword(EncryptPasswordModel encryptPasswordModel) {
  2. // Convert the public keys to BigIntegers
  3. var modulus = CreateBigInteger(encryptPasswordModel.PublicKeyMod);
  4. var exponent = CreateBigInteger(encryptPasswordModel.PublicKeyExp);
  5.  
  6. // Original: $data = this.pkcs1pad2($data,($pubkey.modulus.bitLength()+7)>>3);
  7. // I'm going to hardcode the bitlength, I can't figure that out right now.
  8. var encryptedNumber = Pkcs1Pad2(encryptPasswordModel.Password, (2048 + 7) >> 3);
  9.  
  10. // And now, the RSA encryption
  11. encryptedNumber = BigInteger.ModPow(encryptedNumber, exponent, modulus);
  12.  
  13. // Finally we convert the encrypted string back to Base16
  14. var encryptedString = encryptedNumber.ToString("x");
  15.  
  16. // And then we decode it back
  17. // And we put it back into Base64
  18. encryptedString = EncodeBase64(DecodeHex(encryptedString));
  19.  
  20. return encryptedString;
  21. }
  22.  
  23. public static string DecodeHex(string input) {
  24. var stringBuilder = new StringBuilder();
  25. var i = 0;
  26. do {
  27. var a = ((Hex.IndexOf(input[i++]) << 4) & 0xf0);
  28. var b = 0;
  29.  
  30. if (i < input.Length) b = (Hex.IndexOf(input[i++]) & 0xf);
  31.  
  32. stringBuilder.Append(new[] { (char)(a | b)
  33. });
  34. } while ( i < input . Length );
  35.  
  36. return stringBuilder.ToString();
  37. }
  38.  
  39. public static string EncodeBase64(string input) {
  40. var stringBuilder = new StringBuilder();
  41. var i = 0;
  42.  
  43. do {
  44. var x = 0;
  45. int chr1 = input[i++];
  46. int chr2, chr3;
  47. if (input.Length > i) {
  48. chr2 = input.Length > i ? input[i++] : 0;
  49.  
  50. if (input.Length > i) {
  51. chr3 = input.Length > i ? input[i++] : 0;
  52. }
  53. else {
  54. x = 2;
  55. chr3 = 0;
  56. }
  57. }
  58. else {
  59. x = 1;
  60. chr2 = 0;
  61. chr3 = 0;
  62. }
  63.  
  64. var enc1 = chr1 >> 2;
  65. var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  66. var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  67. var enc4 = chr3 & 63;
  68.  
  69. if (x == 1) enc3 = enc4 = 64;
  70. else if (x == 2) enc4 = 64;
  71.  
  72. stringBuilder.Append(new[] {
  73. Base64[enc1],
  74. Base64[enc2],
  75. Base64[enc3],
  76. Base64[enc4]
  77. });
  78. } while ( i < input . Length );
  79.  
  80. return stringBuilder.ToString();
  81. }
  82.  
  83. /// <summary>
  84. /// Encodes the data
  85. /// </summary>
  86. /// <param name="data"></param>
  87. /// <param name="keySize"></param>
  88. /// <returns></returns>
  89. public static BigInteger Pkcs1Pad2(string data, int keySize) {
  90. if (keySize < data.Length + 11) return new BigInteger();
  91.  
  92. var buffer = new byte[256];
  93. var i = data.Length - 1;
  94.  
  95. while (i >= 0 && keySize > 0) {
  96. buffer[--keySize] = (byte) data[i--];
  97. }
  98.  
  99. // Padding, I think
  100. var random = new Random();
  101. buffer[--keySize] = 0;
  102. while (keySize > 2) {
  103. buffer[--keySize] = (byte) random.Next(1, 256);
  104. //buffer[--keySize] = 5;
  105. }
  106.  
  107. buffer[--keySize] = 2;
  108. buffer[--keySize] = 0;
  109.  
  110. Array.Reverse(buffer);
  111.  
  112. return new BigInteger(buffer);
  113. }
  114.  
  115. public static BigInteger CreateBigInteger(string hex) {
  116. return BigInteger.Parse("00" + hex, NumberStyles.AllowHexSpecifier);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement