CryptographyUtilsTest.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Security.Cryptography;
  2. namespace MeloongCore.Tests;
  3. public class CryptographyUtilsTest : TestBase {
  4. #region 对称加密
  5. [Test]
  6. [Arguments("")]
  7. [Arguments("PCL")]
  8. [Arguments("中文内容 Test 123 !@#$%^&*()")]
  9. public async Task 对称加密_往返(string sourceString) {
  10. string encryptedString = CryptographyUtils.AesEncrypt(sourceString, "PCL-Key-中文");
  11. if (!string.IsNullOrEmpty(sourceString))
  12. await Assert.That(encryptedString != sourceString).IsTrue();
  13. await Assert.That(CryptographyUtils.AesDecrypt(encryptedString, "PCL-Key-中文")).IsEqualTo(sourceString);
  14. }
  15. [Test]
  16. public async Task 对称加密_随机化()
  17. => await Assert.That(CryptographyUtils.AesEncrypt("same source", "same key") != CryptographyUtils.AesEncrypt("same source", "same key")).IsTrue();
  18. [Test]
  19. public void 对称加密_篡改失败() {
  20. byte[] encryptedBytes = Convert.FromBase64String(CryptographyUtils.AesEncrypt("source", "key"));
  21. encryptedBytes[encryptedBytes.Length - 1] ^= 1;
  22. Assert.Throws<CryptographicException>(() => CryptographyUtils.AesDecrypt(Convert.ToBase64String(encryptedBytes), "key"));
  23. }
  24. [Test]
  25. public void AesDecrypt_TamperedIvFails() {
  26. byte[] encryptedBytes = Convert.FromBase64String(CryptographyUtils.AesEncrypt("source", "key"));
  27. encryptedBytes[1] ^= 1;
  28. Assert.Throws<CryptographicException>(() => CryptographyUtils.AesDecrypt(Convert.ToBase64String(encryptedBytes), "key"));
  29. }
  30. [Test]
  31. public void 对称加密_错误密钥失败() {
  32. Assert.Throws<CryptographicException>(() => CryptographyUtils.AesDecrypt(CryptographyUtils.AesEncrypt("source", "key"), "bad key"));
  33. }
  34. [Test]
  35. public void 对称加密_格式错误失败()
  36. => Assert.Throws<CryptographicException>(() => CryptographyUtils.AesDecrypt("not base64", "key"));
  37. #endregion
  38. }