foo.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Security.Cryptography;
  2. using System.Text;
  3. using System;
  4. public class foo {
  5. static byte ToHexValue (char c, bool high)
  6. {
  7. byte v;
  8. if (c >= '0' && c <= '9')
  9. v = (byte) (c - '0');
  10. else if (c >= 'a' && c <= 'f')
  11. v = (byte) (c - 'a' + 10);
  12. else if (c >= 'A' && c <= 'F')
  13. v = (byte) (c - 'A' + 10);
  14. else
  15. throw new ArgumentException ("Invalid hex character");
  16. if (high)
  17. v <<= 4;
  18. return v;
  19. }
  20. internal static byte [] GetBytes (string key, int len)
  21. {
  22. byte [] result = new byte [len / 2];
  23. for (int i = 0; i < len; i += 2)
  24. result [i / 2] = (byte) (ToHexValue (key [i], true) + ToHexValue (key [i + 1], false));
  25. return result;
  26. }
  27. static void decrypt () {
  28. string ans = "NVG3kJkWiFzKHh2UAEDiaY4kvYYUk+z4gEdlv2rZudA=";
  29. string key = "1E14FC86752772F5DB58B99764D0168106D336563D77CCBA";
  30. string salt = "xXsrnq4n1jebmRiC/Ty46g==";
  31. byte[] key_bytes = GetBytes (key, key.Length);
  32. byte[] ans_bytes = Convert.FromBase64String (ans);
  33. byte[] salt_bytes = Convert.FromBase64String (salt);
  34. Console.WriteLine ("encrypted = {0} long, salt = {1} long", ans_bytes.Length, salt_bytes.Length);
  35. SymmetricAlgorithm alg = Rijndael.Create ();
  36. ICryptoTransform decryptor = alg.CreateDecryptor (key_bytes, salt_bytes);
  37. byte[] rv = decryptor.TransformFinalBlock (ans_bytes, 0, ans_bytes.Length);
  38. Console.WriteLine ("decryption result = {0}", Convert.ToBase64String (rv));
  39. Console.WriteLine (Encoding.Unicode.GetString (rv));
  40. }
  41. static void encrypt () {
  42. string ans = "green";
  43. string key = "1E14FC86752772F5DB58B99764D0168106D336563D77CCBA";
  44. string salt = "xXsrnq4n1jebmRiC/Ty46g==";
  45. byte[] key_bytes = GetBytes (key, key.Length);
  46. byte[] ans_bytes = Encoding.Unicode.GetBytes (ans);
  47. byte[] salt_bytes = Convert.FromBase64String (salt);
  48. byte[] buf = new byte[ans_bytes.Length + salt_bytes.Length];
  49. /*Array.Copy (salt_bytes, 0, buf, 0, salt_bytes.Length);*/
  50. Array.Copy (ans_bytes, 0, buf, salt_bytes.Length, ans_bytes.Length);
  51. Console.WriteLine ("before encryption {0}", Convert.ToBase64String (buf));
  52. SymmetricAlgorithm alg = Rijndael.Create ();
  53. ICryptoTransform encryptor = alg.CreateEncryptor (key_bytes, salt_bytes);
  54. Console.WriteLine (Convert.ToBase64String (encryptor.TransformFinalBlock (buf, 0, buf.Length)));
  55. }
  56. public static void Main (string[] args) {
  57. decrypt();
  58. encrypt();
  59. }
  60. }