文档中心 > YunOS开放平台

轻服务出口网关C#语言参考

更新时间:2015/10/11 访问次数:31730

C#相关SDK代码

一,解密k必须先拿到秘钥为:MD5Encrypt(aesKey) .Substring(0, 16) 就是下面函数的key。
调用下面的函数加密解密。

加密:

public static string AESEncrypt(string plainStr,string key)
        {
            
byte[] bKey = Encoding.UTF8.GetBytes(key.Substring(0, 16));
            
byte[] bIV = Encoding.UTF8.GetBytes(key.Substring(0, 16));
            
byte[] byteArray = Encoding.UTF8.GetBytes(plainStr);

            
string encrypt = null;
            
Rijndael aes = Rijndael.Create();
            
try
            {
                
using (MemoryStream mStream = new MemoryStream())
                {
                    
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(byteArray, 0, byteArray.Length);
                        cStream.FlushFinalBlock();
                        encrypt = 
Convert.ToBase64String(mStream.ToArray());
                    }
                }
            }
            
catch { }
            aes.Clear();

            
return encrypt;
        }

解密:

public static string AESDecrypt(string encryptStr,string key)
        {
            
byte[] bKey = Encoding.UTF8.GetBytes(key.Substring(0,16));
            
byte[] bIV = Encoding.UTF8.GetBytes(key.Substring(0,16));
            
byte[] byteArray = Convert.FromBase64String(encryptStr);

            
string decrypt = null;
            
Rijndael aes = Rijndael.Create();
            
try
            {
                
using (MemoryStream mStream = new MemoryStream())
                {
                    
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(byteArray, 0, byteArray.Length);
                        cStream.FlushFinalBlock();
                        decrypt = 
Encoding.UTF8.GetString(mStream.ToArray());
                    }
                }
            }
            
catch { }
            aes.Clear();

            
return decrypt;
        }

MD5

public static string MD5Encrypt(string sourceStr){
            
MD5 md5 = new MD5CryptoServiceProvider();
            
byte[] bys = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(sourceStr));
            
return BitConverter.ToString(bys).Replace("-","");
        }

签名验证

public static bool CheckSign(Dictionary<string, string> map, string sign)
        {
            //
步骤二,对解密后的入参做签名验证
            //第1步: 把入参明文json转换后的Map参数按key升序排序。
            //第2步: 把排序后的key和它对应的value拼接成一个字符串。 
            //中间用   public static final char delimiter = 0; 非可见字符0分隔。
            //第3步: 把签名signkey拼接在第2步得到的字符串后面。 
            //第4步: 计算第3步字符串的md5值,使用md5值的16进制字符串作为sign的内容。
            //第5步:将入参sign和刚才计算出的sign进行比对,如果相等,说明校验通过。
            Dictionary<string, string> dic2 = map.OrderBy(k => k.Key).ToDictionary(k => k.Key, v => v.Value);
            dic2.Remove("sign");
            char fgc = (char)0;
            string fsign = string.Empty;
            foreach (var item in dic2)
            {
                fsign += item.Key + fgc + item.Value + fgc;
            }
            //fsign = fsign.Substring(0, fsign.Length - 1);
            fsign += signKey;
            string md5sign = MD5Encrypt(fsign);
            if (md5sign.Equals(sign, StringComparison.InvariantCultureIgnoreCase))
            {
                return true;
            }

            return false;
        }

 

 

 

 

FAQ

关于此文档暂时还没有FAQ
文档标签:
C#
返回
顶部