UnitTest1.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using Microsoft.Extensions.Logging.Abstractions;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using ShengJuDesFireEv1CpuCardKeyLoader;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Security.Cryptography;
  9. using System.Text;
  10. namespace KeyLoad_Test
  11. {
  12. [TestClass]
  13. public class ShengJuDesFireEv1CpuCardKeyLoaderUnitTest
  14. {
  15. public static bool ValueEquals(IEnumerable<byte> array1, IEnumerable<byte> array2)
  16. {
  17. if (array1 == null && array2 == null)
  18. {
  19. return true;
  20. }
  21. if ((array1 == null) || (array2 == null))
  22. {
  23. return false;
  24. }
  25. if (array1.Count() != array2.Count())
  26. {
  27. return false;
  28. }
  29. if (array1.Equals(array2))
  30. {
  31. return true;
  32. }
  33. else
  34. {
  35. for (int Index = 0; Index < array1.Count(); Index++)
  36. {
  37. if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index)))
  38. {
  39. return false;
  40. }
  41. }
  42. }
  43. return true;
  44. }
  45. [TestMethod]
  46. public void EncryptStringTestMethod1()
  47. {
  48. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  49. string dataPlainText = "helloworld";
  50. var encryptedBytes = keyLoader.EncryptString(dataPlainText);
  51. Assert.IsNotNull(encryptedBytes);
  52. Assert.IsTrue(encryptedBytes.Length > 0);
  53. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  54. Assert.IsNotNull(decryptedBytes);
  55. Assert.IsTrue(decryptedBytes.Length > 0);
  56. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(dataPlainText)), decryptedBytes));
  57. }
  58. [TestMethod]
  59. public void EncryptStringTestMethod2()
  60. {
  61. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  62. string dataPlainText = "12 helloworld4567^&$%#SFWE@#";
  63. var encryptedBytes = keyLoader.EncryptString(dataPlainText);
  64. Assert.IsNotNull(encryptedBytes);
  65. Assert.IsTrue(encryptedBytes.Length > 0);
  66. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  67. Assert.IsNotNull(decryptedBytes);
  68. Assert.IsTrue(decryptedBytes.Length > 0);
  69. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(dataPlainText)), decryptedBytes));
  70. }
  71. [TestMethod]
  72. public void EncryptStringTestMethod3()
  73. {
  74. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  75. string dataPlainText = "12 helloworld4567^&$%#SFWE@#7、USB头为公头,可直接连接电脑USB口";
  76. var encryptedBytes = keyLoader.EncryptString(dataPlainText);
  77. Assert.IsNotNull(encryptedBytes);
  78. Assert.IsTrue(encryptedBytes.Length > 0);
  79. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  80. Assert.IsNotNull(decryptedBytes);
  81. Assert.IsTrue(decryptedBytes.Length > 0);
  82. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(dataPlainText)), decryptedBytes));
  83. }
  84. [TestMethod]
  85. public void ManualExtracCardKeyTestMethod1()
  86. {
  87. string dataPlainText = "nullable_string_sample";
  88. var cardKeyExtractByManual = SHA256Managed.Create().ComputeHash(Encoding.UTF8.GetBytes(dataPlainText)).Select(b => b.ToString()).Aggregate((acc, n) => acc + ", " + n);
  89. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  90. var cardKeyExtractByDecrypt = keyLoader.Decrypt(
  91. Convert.FromBase64String("iczuc2nVu+S1dVOHiOVEZFyb52rdW5GSHfIp80VVicSYBZp/sbCSJ0ldYJkjv8tf+nszFVWmrPj/OM/YvUchVQ=="),
  92. new byte[] { 0x9C, 0x56, 0x13, 0x9A, 0x9D, 0xA7 }.Concat(Enumerable.Range(0, 16 - 6).Select(i => (byte)i)).ToArray()).Select(b => b.ToString()).Aggregate((acc, n) => acc + ", " + n);
  93. Assert.AreEqual(cardKeyExtractByManual, cardKeyExtractByDecrypt);
  94. }
  95. [TestMethod]
  96. public void EncryptStringTestMethod4()
  97. {
  98. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  99. byte[] data = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  100. var encryptedBytes = keyLoader.EncryptString(Convert.ToBase64String(data));
  101. Assert.IsNotNull(encryptedBytes);
  102. Assert.IsTrue(encryptedBytes.Length > 0);
  103. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  104. Assert.IsNotNull(decryptedBytes);
  105. Assert.IsTrue(decryptedBytes.Length > 0);
  106. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(Convert.ToBase64String(data))), decryptedBytes));
  107. }
  108. [TestMethod]
  109. public void EncryptStringTestMethod5()
  110. {
  111. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  112. string rootKeyPlainText = "helloworld";
  113. var rootKeyEncryptedBytes = keyLoader.EncryptString(rootKeyPlainText);
  114. Assert.IsTrue(rootKeyPlainText != Encoding.UTF8.GetString(rootKeyEncryptedBytes));
  115. var keySet = keyLoader.Get(new EncryptedBase64KeySet()
  116. {
  117. RootKey = Convert.ToBase64String(rootKeyEncryptedBytes),
  118. });
  119. Assert.IsNotNull(keySet);
  120. Assert.IsNotNull(keySet.RootKey);
  121. Assert.IsTrue(keySet.RootKey.Length > 0);
  122. Assert.IsTrue(ValueEquals(keySet.RootKey, SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(rootKeyPlainText))));
  123. }
  124. [TestMethod]
  125. public void EncryptBytesTestMethod1()
  126. {
  127. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  128. byte[] data = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  129. var encryptedBytes = keyLoader.EncryptBytes(data);
  130. Assert.IsNotNull(encryptedBytes);
  131. Assert.IsTrue(encryptedBytes.Length > 0);
  132. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  133. Assert.IsNotNull(decryptedBytes);
  134. Assert.IsTrue(decryptedBytes.Length > 0);
  135. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(data), decryptedBytes));
  136. }
  137. [TestMethod]
  138. public void EncryptBytesTestMethod2()
  139. {
  140. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  141. byte[] data = new byte[] { 255, 2, 3, 4, 5, 6, 7, 8, 9, 10, 255, 2, 3, 4, 5, 6, 7, 8, 9, 10, 255, 2, 3, 4, 5, 6, 7, 8, 9, 10, 255, 2, 3, 4, 5, 6, 7, 8, 9, 10, 255, 2, 3, 4, 5, 6, 7, 8, 9, 10, 255, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  142. var encryptedBytes = keyLoader.EncryptBytes(data);
  143. Assert.IsNotNull(encryptedBytes);
  144. Assert.IsTrue(encryptedBytes.Length > 0);
  145. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  146. Assert.IsNotNull(decryptedBytes);
  147. Assert.IsTrue(decryptedBytes.Length > 0);
  148. Assert.IsTrue(ValueEquals(SHA256.Create().ComputeHash(data), decryptedBytes));
  149. }
  150. [TestMethod]
  151. public void DecryptStringTestMethod1()
  152. {
  153. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  154. string encryptingStr = "helloworld0helloworld1helloworld2helloworld3helloworld4helloworld5";
  155. var encryptedBytes = keyLoader.EncryptString(encryptingStr, false);
  156. Assert.IsTrue(encryptingStr != Encoding.UTF8.GetString(encryptedBytes));
  157. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  158. var decryptedString = Encoding.UTF8.GetString(decryptedBytes);
  159. Assert.IsTrue(decryptedString == encryptingStr);
  160. }
  161. [TestMethod]
  162. public void DecryptStringTestMethod2()
  163. {
  164. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  165. byte[] encryptingBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
  166. var encryptedBytes = keyLoader.EncryptBytes(encryptingBytes, false);
  167. Assert.IsTrue(!ValueEquals(encryptingBytes, encryptedBytes));
  168. var decryptedBytes = keyLoader.Decrypt(encryptedBytes);
  169. Assert.AreEqual(encryptingBytes.Length, decryptedBytes.Length, "actual hex: " + decryptedBytes.ToHexLogString());
  170. Assert.IsTrue(ValueEquals(encryptingBytes, decryptedBytes));
  171. //HyzLE00CvI9KZMwoISwlLSlxsYN6lkeNxDozEXgzx+8JzZftkCa0x+mw9dfUNIj1
  172. }
  173. [TestMethod]
  174. public void DecryptBase64StringTestMethod1()
  175. {
  176. var keyLoader = new LocalNetworkMacBasedEncryptionKeyLoader(NullLogger.Instance);
  177. string encryptedBase64Str = "taEIFt/feuqBltCgFU3Dy6Y2PjtndTDLUyRulkAQRaQWzulE9vU2AHNEUf7qWdNc";
  178. var decryptedBytes = keyLoader.Decrypt(Convert.FromBase64String(encryptedBase64Str));
  179. Assert.AreEqual(Encoding.UTF8.GetString(decryptedBytes), "nullable_string_sample");
  180. }
  181. }
  182. }