我有一个在任何情况下都满足([a-zA-Z0-9])*
的字符串,我想让它通过sha1。
那么我如何将字符串(或使用ToCharArray()获得的字符数组)转换为字节数组?
到目前为止,我发现的所有答案都有一大堆评论,为什么从字符串到字节数组的转换是邪恶的,他们提供了字符编码教程的链接,并包括一堆字符编码,使代码膨胀。
在我的情况下,转换应该是LINQ联机程序,安全和整洁。
我试着:
sha.ComputeHash(validator.ToCharArray().ToArray<byte>())
和我在我的LINQ知识范围内玩了一下:
sha.ComputeHash(validator.ToCharArray().ToArray<byte>(c => (byte)c))
validator.Select(c => (byte)c).ToArray()
也可以。"string"类型支持"IEnumerable",所以你可以直接使用LINQ。
"Select"方法允许你指定一个lambda来定制你的输出。这将取代您试图用"ToArray(c => (byte)c))"做的事情。
Encoding.GetEncoding("UTF-8").GetBytes(chararray);
对于您的目的来说,编码是不必要的,尽管它可能更方便。
你可以这样做,
sha.ComputeHash(validator.SelectMany(BitConverter.GetBytes).ToArray());
我喜欢这个版本:
System.Text.Encoding.UTF8.GetBytes(chararray);
与上文大致相同