123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using System;
- using System.Text;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using Org.BouncyCastle.Crypto;
- using Org.BouncyCastle.Crypto.Parameters;
- using Org.BouncyCastle.Math;
- using Org.BouncyCastle.Utilities.Encoders;
- namespace AnHuiMI.Common
- {
- class SignUtils
- {
- public static string signSm3WithSm2(string chnlId, string sm4key, string prvkey, string data)
- {
- ECPrivateKeyParameters privatekeyFromD = GmUtil.GetPrivatekeyFromD(new BigInteger(Convert.FromBase64String(prvkey)));
- return Convert.ToBase64String(GmUtil.SignSm3WithSm2(Encoding.UTF8.GetBytes(data), Encoding.UTF8.GetBytes(sm4key), privatekeyFromD));
- }
- public static bool verifySm3WithSm2(string msg, string sm4key, string signData, string pubKey)
- {
- byte[] array = Convert.FromBase64String(pubKey);
- BitConverter.ToString(array);
- AsymmetricKeyParameter publickeyFromXY = GmUtil.GetPublickeyFromXY(array);
- byte[] rs = Convert.FromBase64String(signData);
- return GmUtil.VerifySm3WithSm2(Encoding.UTF8.GetBytes(msg), Encoding.UTF8.GetBytes(sm4key), rs, publickeyFromXY);
- }
- public static string getSignText(string chnlId, string sm4key, string data,long ts)
- {
- JObject jobject = new JObject();
- jobject.Add("appId", chnlId);
- jobject.Add("data", data);
- jobject.Add("encType", "SM4");
- jobject.Add("signType", "SM2");
- jobject.Add("timestamp", ts); ;
- jobject.Add("version", "2.0.1");
- string value = StringUtils.SortJson(jobject.ToString());
- return StringUtils.Json2sign(value) + "&key=" + sm4key;
- }
- public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data, ref string rtSignPlain)
- {
- long ts = StringUtils.CurrentTimeStamp();
- string signText = SignUtils.getSignText(chnlId, sm4key, data,ts);
- string signData = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
- string encData = SignUtils.sm4Encrypt(chnlId, sm4key, data);
- JObject jobject = new JObject();
- jobject.Add("appId", chnlId);
- jobject.Add("encData", encData);
- jobject.Add("encType", "SM4");
- jobject.Add("signData", signData);
- jobject.Add("signType", "SM2");
- jobject.Add("timestamp", ts);
- jobject.Add("version", "2.0.1");
- rtSignPlain = signData;
- return jobject.ToString(Formatting.None, null);
- }
- public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data)
- {
- long ts = StringUtils.CurrentTimeStamp();
- string signText = SignUtils.getSignText(chnlId, sm4key, data, ts);
- string value = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
- string value2 = SignUtils.sm4Encrypt(chnlId, sm4key, data);
- return new JObject
- {
- {
- "appId",
- chnlId
- },
- {
- "encData",
- value2
- },
- {
- "encType",
- "SM4"
- },
- {
- "signData",
- value
- },
- {
- "signType",
- "SM2"
- },
- {
- "timestamp",
- ts
- },
- {
- "version",
- "2.0.1"
- }
- }.ToString(Formatting.None, null);
- }
- public static string sm4Encrypt(string chnlId, string sm4key, string message)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
- byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
- byte[] bytes3 = Encoding.UTF8.GetBytes(message);
- string text = Hex.ToHexString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding")).ToUpper();
- return Hex.ToHexString(GmUtil.Sm4EncryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), bytes3, "SM4/ECB/PKCS7Padding"));
- }
- public static string sm4Decrypt(string chnlId, string sm4key, string message)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
- byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
- byte[] cipher = Hex.Decode(message);
- string text = BitConverter.ToString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding"), 0).Replace("-", string.Empty).ToUpper();
- byte[] bytes3 = GmUtil.Sm4DecryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), cipher, "SM4/ECB/PKCS7Padding");
- return Encoding.UTF8.GetString(bytes3);
- }
- }
- }
|