CryptogramUtil.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. using Org.BouncyCastle.Utilities.Encoders;
  10. namespace Admin.NET.Core;
  11. public class CryptogramUtil
  12. {
  13. public static readonly string CryptoType = App.GetConfig<string>("Cryptogram:CryptoType"); // 加密类型
  14. public static readonly string PublicKey = App.GetConfig<string>("Cryptogram:PublicKey"); // 公钥
  15. public static readonly string PrivateKey = App.GetConfig<string>("Cryptogram:PrivateKey"); // 私钥
  16. /// <summary>
  17. /// 加密
  18. /// </summary>
  19. /// <param name="plainText"></param>
  20. /// <returns></returns>
  21. public static string Encrypt(string plainText)
  22. {
  23. if (CryptoType == CryptogramEnum.MD5.ToString())
  24. {
  25. return MD5Encryption.Encrypt(plainText);
  26. }
  27. else if (CryptoType == CryptogramEnum.SM2.ToString())
  28. {
  29. return SM2Encrypt(plainText);
  30. }
  31. else if (CryptoType == CryptogramEnum.SM4.ToString())
  32. {
  33. return SM4EncryptECB(plainText);
  34. }
  35. return plainText;
  36. }
  37. /// <summary>
  38. /// 解密
  39. /// </summary>
  40. /// <param name="cipherText"></param>
  41. /// <returns></returns>
  42. public static string Decrypt(string cipherText)
  43. {
  44. if (CryptoType == CryptogramEnum.SM2.ToString())
  45. {
  46. return SM2Decrypt(cipherText);
  47. }
  48. else if (CryptoType == CryptogramEnum.SM4.ToString())
  49. {
  50. return SM4DecryptECB(cipherText);
  51. }
  52. return cipherText;
  53. }
  54. /// <summary>
  55. /// SM2加密
  56. /// </summary>
  57. /// <param name="plainText"></param>
  58. /// <returns></returns>
  59. public static string SM2Encrypt(string plainText)
  60. {
  61. byte[] sourceData = Encoding.Default.GetBytes(plainText);
  62. return SM2Util.Encrypt(Hex.Decode(PublicKey), sourceData);
  63. }
  64. /// <summary>
  65. /// SM2解密
  66. /// </summary>
  67. /// <param name="cipherText"></param>
  68. /// <returns></returns>
  69. public static string SM2Decrypt(string cipherText)
  70. {
  71. return Encoding.Default.GetString(SM2Util.Decrypt(Hex.Decode(PrivateKey), Hex.Decode(cipherText)));
  72. }
  73. /// <summary>
  74. /// SM4加密(ECB)
  75. /// </summary>
  76. /// <param name="plainText"></param>
  77. /// <returns></returns>
  78. public static string SM4EncryptECB(string plainText)
  79. {
  80. var sm4 = new SM4Util();
  81. return sm4.Encrypt_ECB(plainText);
  82. }
  83. /// <summary>
  84. /// SM4解密(ECB)
  85. /// </summary>
  86. /// <param name="cipherText"></param>
  87. /// <returns></returns>
  88. public static string SM4DecryptECB(string cipherText)
  89. {
  90. var sm4 = new SM4Util();
  91. return sm4.Decrypt_ECB(cipherText);
  92. }
  93. /// <summary>
  94. /// SM4加密(CBC)
  95. /// </summary>
  96. /// <param name="plainText"></param>
  97. /// <returns></returns>
  98. public static string SM4EncryptCBC(string plainText)
  99. {
  100. var sm4 = new SM4Util();
  101. return sm4.Encrypt_CBC(plainText);
  102. }
  103. /// <summary>
  104. /// SM4解密(CBC)
  105. /// </summary>
  106. /// <param name="cipherText"></param>
  107. /// <returns></returns>
  108. public static string SM4DecryptCBC(string cipherText)
  109. {
  110. var sm4 = new SM4Util();
  111. return sm4.Decrypt_CBC(cipherText);
  112. }
  113. }