使用 BouncyCastle 库实现
C# 实现
无盐值
csharp
/// <summary>
/// SM3加密
/// </summary>
/// <param name="srcData"></param>
/// <param name="salt">盐</param>
/// <returns></returns>
public static string Encrypt(string srcData, string salt)
{
byte[] msg = Encoding.Default.GetBytes(srcData);
byte[] md = new byte[32];
byte[] bytes = ArrayCat(msg, Encoding.Default.GetBytes(salt));
SM3Digest sm3 = new SM3Digest();
sm3.BlockUpdate(bytes, 0, bytes.Length);
sm3.DoFinal(md, 0);
return new UTF8Encoding().GetString(Hex.Encode(md));
}
含盐值
csharp
/// <summary>
/// sm3加密(含盐值)
/// </summary>
/// <param name="input"></param>
/// <param name="salt"></param>
/// <returns></returns>
public static string ComputeSm3WithSalt(string input, byte[] salt)
{
byte[] contextBytes = Encoding.UTF8.GetBytes(input);
byte[] saltKeyBytes = salt;
IDigest digest = new SM3Digest();
// 加盐
digest.BlockUpdate(saltKeyBytes, 0, saltKeyBytes.Length);
digest.BlockUpdate(contextBytes, 0, contextBytes.Length);
byte[] hash = new byte[digest.GetDigestSize()];
digest.DoFinal(hash, 0);
return Hex.ToHexString(hash);
}