首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHA1加密故障

SHA1加密故障
EN

Stack Overflow用户
提问于 2012-12-11 10:37:56
回答 2查看 382关注 0票数 0

我对密码加密有问题。我希望密码加密,就像图片中没有高亮显示的密码一样。

我编写了以下c#代码:

代码语言:javascript
复制
        SHA1CryptoServiceProvider x = new SHA1CryptoServiceProvider();

        //byte[] bs = System.Text.Encoding.Unicode.GetBytes(password);
        //byte[] bs = System.Text.Encoding.UTF32.GetBytes(password);
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(password);
        bs = x.ComputeHash(bs);
        var s = new StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }

        new UserService().ChangeUserPassword(username, s.ToString());

若要以正确的方式加密密码,请使用我希望删除的以下SQL代码:

CAST(hashbytes('SHA1',@newuserpassword) as nvarchar)

其结果是:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 10:43:20

看看CONVERT的文档,我怀疑你只是想:

代码语言:javascript
复制
CONVERT(nvarchar, hashbytes('SHA1',@newuserpassword), 2)

其中2是在没有前导0x的情况下转换为十六进制的样式。我建议您指定nvarchar的长度,它应该是40 (20个字节,每个字节2个字符)。

票数 2
EN

Stack Overflow用户

发布于 2012-12-11 11:49:50

我强烈建议您放弃以字符存储二进制数据。不过,如果出于遗留原因需要保留它,下面是SQL语句的翻译:

代码语言:javascript
复制
byte[] bytes = ...; //your binary data here
var nastilyBrokenChars =
    Enumerable.Range(0, bytes.Length / 2)
    .Select(i => (char)BitConverter.GetInt16(bytes, i * 2))
    .ToArray();
string nastilyBrokenString = new string(nastilyBrokenChars);

您可以这样做,我在每个char中填充两个char。这本身就是一个无损的转换。但是,我不相信将这些数据存储到Server中(并在以后进行比较)是没有损失的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13818482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档