fork(1) download
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4.  
  5. public class Test
  6. {
  7. static void Main( string[] args )
  8. {
  9. string data = "hello";
  10. Encrypt(data);
  11. }
  12.  
  13. static void Encrypt( string data )
  14. {
  15. PaddingMode padding = PaddingMode.PKCS7;
  16. CipherMode cipherMode = CipherMode.ECB;
  17. int size = 128;
  18.  
  19. Console.WriteLine("input: '" + data + "'");
  20.  
  21. string officialKey = "9840822c-14fc-49ac-9d68-ac532f9f171e";
  22. Console.WriteLine("key: '" + officialKey + "'");
  23.  
  24. Console.WriteLine("block size: '16'");
  25. Console.WriteLine( "padding: '11'" );
  26.  
  27. var utf8dataBytes = Encoding.UTF8.GetBytes(data);
  28. var utf8data = Encoding.UTF8.GetString(utf8dataBytes);
  29. Console.WriteLine("utf8 json: '" + utf8data + "'");
  30.  
  31. Console.WriteLine("encoded key (utf8): " + officialKey);
  32.  
  33. var utf8KeyBytes = Encoding.UTF8.GetBytes(officialKey);
  34.  
  35. var myMD5 = MD5.Create();
  36. var md5HashOfKey = myMD5.ComputeHash(utf8KeyBytes);
  37.  
  38. Console.WriteLine( "md5 hash of key (raw): " + DumpBinary(md5HashOfKey) );
  39. Console.WriteLine("md5 hash of key (base64): " + Convert.ToBase64String(md5HashOfKey));
  40. Console.WriteLine("BitConverter.ToString(md5HashOfKey): " + BitConverter.ToString(md5HashOfKey));
  41. Console.WriteLine("BitConverter.ToString(md5HashOfKey).Replace(): " + BitConverter.ToString(md5HashOfKey).Replace("-",""));
  42.  
  43. byte[] encryptedBlob = null;
  44.  
  45. using ( var aes = new AesManaged() )
  46. {
  47. try
  48. {
  49. aes.Padding = PaddingMode.PKCS7;
  50. aes.Mode = CipherMode.ECB;
  51. aes.KeySize = 256;
  52. aes.BlockSize = 128;
  53. aes.Key = Encoding.ASCII.GetBytes(BitConverter.ToString(md5HashOfKey).Replace("-","").ToLower());
  54.  
  55. //aes.IV = new byte[] { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 };
  56.  
  57. var bytes = utf8dataBytes;
  58. //var bytes = ForcePaddingManually( utf8dataBytes );
  59.  
  60. var cxform = aes.CreateEncryptor();
  61. encryptedBlob = cxform.TransformFinalBlock( bytes, 0, bytes.Length );
  62. Console.WriteLine("finished" + encryptedBlob.Length);
  63. }
  64. catch (Exception e)
  65. {
  66. Console.WriteLine("{0} Exception caught.", e);
  67. }
  68. finally
  69. {
  70. aes.Clear();
  71. }
  72. }
  73.  
  74. //var encryptedBlob = AesAlgo.Encrypt( data, md5HashOfKey, padding, cipherMode, size );
  75. Console.WriteLine("mcrypt (raw): " + DumpBinary(encryptedBlob));
  76. Console.WriteLine("mcrypt: " + Encoding.UTF8.GetString(encryptedBlob));
  77.  
  78. var encryptedBase64 = Convert.ToBase64String(encryptedBlob);
  79. Console.WriteLine( "presid: " + encryptedBase64 );
  80.  
  81. var encodedEncryptedBlob = encryptedBase64.Replace( "+", "-" ).Replace( "/", "_" );
  82. Console.WriteLine( "sid: " + encodedEncryptedBlob );
  83. Console.WriteLine("COMPLETE!");
  84. }
  85.  
  86. static byte[] ForcePaddingManually( byte[] data )
  87. {
  88. // force padding manually to test that PKCS7 works like we are expecting
  89. var pad = ( 16 - data.Length % 16 ) % 16;
  90. var bytes = new byte[data.Length + pad];
  91. for ( int i = 0; i < data.Length; ++i )
  92. {
  93. bytes[i] = data[i];
  94. }
  95. for ( int i = data.Length; i < data.Length + pad; ++i )
  96. {
  97. bytes[i] = (byte)pad;
  98. }
  99.  
  100. return bytes;
  101. }
  102.  
  103. static string DumpBinary( byte[] data )
  104. {
  105. var sb = new StringBuilder();
  106. for ( int i = 0; i < data.Length; ++i )
  107. {
  108. sb.Append( data[i].ToString( "X2" ) );
  109. }
  110. return sb.ToString();
  111. }
  112. }
Success #stdin #stdout 0.14s 24432KB
stdin
Standard input is empty
stdout
input: 'hello'
key: '9840822c-14fc-49ac-9d68-ac532f9f171e'
block size: '16'
padding: '11'
utf8 json: 'hello'
encoded key (utf8): 9840822c-14fc-49ac-9d68-ac532f9f171e
md5 hash of key (raw): 6D334201CB7625323DA32E0C31B2B138
md5 hash of key (base64): bTNCAct2JTI9oy4MMbKxOA==
BitConverter.ToString(md5HashOfKey): 6D-33-42-01-CB-76-25-32-3D-A3-2E-0C-31-B2-B1-38
BitConverter.ToString(md5HashOfKey).Replace(): 6D334201CB7625323DA32E0C31B2B138
finished16
mcrypt (raw): B0D298C83D20A0CBB9F0EA4305CEF2EC
mcrypt: �Ҙ�= �˹��C���
presid: sNKYyD0goMu58OpDBc7y7A==
sid: sNKYyD0goMu58OpDBc7y7A==
COMPLETE!