之前在项目中涉及到了加密处理方面的知识,在这里做个记录,加密方式采取的是Sha256方式,是比较常用的加密,代码如下:
public void Save()
{
Debug.Log(user.text+":"+ pass.text);
if (user.text == null || pass.text == null ||
user.text == string.Empty || pass.text == string.Empty)
return;
string nonce = Nonce(16, true, false, true, false, "123456789ABCDEF");
//Thread.Sleep(100);
string cnonce = Nonce(16, true, false, true, false, "123456789ABCDEF");
string passWord = Sha256(nonce + Sha256(pass.text) + cnonce);
endUrl = "?username=" + user.text + "&password=" + passWord
+ "&nonce=" + nonce + "&cnonce=" + cnonce;
Debug.Log(_url + endUrl);
StartCoroutine(PostForUnity(_url + endUrl,"{}"));
//Debug.Log(passWord);
}
/// <summary>
/// 256加密
/// </summary>
/// <param name="pass">密码</param>
/// <returns>返回加密后的密码</returns>
public string Sha256(string pass)
{
if (pass == null || pass == string.Empty) { PassErrorUI.SetActive(true); return null; }
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(pass);
byte[] hash = SHA256Managed.Create().ComputeHash(buffer);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
builder.Append(hash[i].ToString("X2"));
}
// Debug.Log("一次:" + builder.ToString().ToUpper());
return builder.ToString().ToUpper();
}
/// <summary>
/// 随机16位
/// </summary>
/// <param name="length">长度</param>
/// <param name="useNum">是否有数字</param>
/// <param name="useLow">是否有小写</param>
/// <param name="useUpp">是否有大写</param>
/// <param name="useSpe">是否有特殊字符</param>
/// <param name="custom">随机码</param>
/// <returns>返回随机数</returns>
public string Nonce(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
{
byte[] b = new byte[4];
new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
System.Random r = new System.Random(BitConverter.ToInt32(b, 0));
string s = string.Empty;
string value = custom;
if (useNum == true) value += "0123456789";
if (useLow == true) value += "abcdefghijklmnopqrstuvwxyz";
if (useUpp == true) value += "ABCDEF";
if (useSpe == true) value += "!\"#$%&'()+,-./:;<=>?@[\\]^_~{|}`";
for (int i = 0; i < length; i++)
{
s += value.Substring(r.Next(0, value.Length - 1), 1);
}
// Debug.Log("s:" + s);
return s;
}
单纯的sha256因为很常用所以破解起来会容易些,所以在这里我加了一个16位的随机数,增强了加密方式,简单就到这里吧,没有什么好说的,主要是详细看看脚本,理解脚本。
有疑问的话可以评论留言,也可以加群 QQ:853164080
Over!