Unity加密(Sha256方式加密)


之前在项目中涉及到了加密处理方面的知识,在这里做个记录,加密方式采取的是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!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值