| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using Org.BouncyCastle.Crypto.Parameters;
- using Org.BouncyCastle.Security;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading.Tasks;
- namespace PTMedicalInsurance.Common.SMLib
- {
- class VerifyPasswordEncryptUtils
- {
- public static string encrypt(string plaintext, string secKey)
- {
- byte[] keyBytes = Encoding.UTF8.GetBytes(secKey);
- if (keyBytes.Length != 16)
- throw new ArgumentException("Key must be 16 bytes (ASCII string of length 16).");
- // 生成随机 IV(16 字节)
- byte[] iv = new byte[16];
- using (var rng = RandomNumberGenerator.Create())
- rng.GetBytes(iv);
- byte[] plainBytes = Encoding.UTF8.GetBytes(plaintext);
- // 使用 SM4/CBC/PKCS7
- var keyParam = ParameterUtilities.CreateKeyParameter("SM4", keyBytes);
- var ivParam = new ParametersWithIV(keyParam, iv);
- var cipher = CipherUtilities.GetCipher("SM4/CBC/PKCS7Padding");
- cipher.Init(true, ivParam); // true = encrypt
- byte[] encrypted = cipher.DoFinal(plainBytes);
- // 拼接 IV + 密文
- byte[] combined = new byte[iv.Length + encrypted.Length];
- Buffer.BlockCopy(iv, 0, combined, 0, iv.Length);
- Buffer.BlockCopy(encrypted, 0, combined, iv.Length, encrypted.Length);
- // 返回 Base64(与 Java 一致)
- return Convert.ToBase64String(combined);
- }
-
- }
- }
|