将charArray转换为byteArray

21

我有一个字符串,该字符串在任何情况下都符合([a-zA-Z0-9])*,我想让它经过sha1加密。

那么,我应该如何将字符串(或使用ToCharArray()获得的字符数组)转换为字节数组?

到目前为止,我发现所有答案都有很多评论,说明从字符串转换为字节数组是不好的,他们提供链接到字符编码教程,并包括一堆膨胀代码的字符编码。

在我的情况下,转换应该是一个安全和整洁的LINQ单行代码。

我尝试过:

sha.ComputeHash(validator.ToCharArray().ToArray<byte>())

然后我在我了解的LINQ知识范围内玩耍:

sha.ComputeHash(validator.ToCharArray().ToArray<byte>(c => (byte)c))

这个链接应该是你需要的:https://dev59.com/wGcs5IYBdhLWcg3w1nhq。 - Chris
4个回答

23
validator.Select(c => (byte)c).ToArray()

这也可以正常工作。"string"类型支持"IEnumerable",因此您可以直接使用LINQ。

"Select"方法允许您指定一个lambda来自定义输出。这将替换您之前尝试使用"ToArray(c => (byte)c))"的操作。


缩小但安全在255以下。 - Jodrell
@Alexander,根据你的输入范围,这将生成与UTF.GetBytes相同的哈希值。 - Jodrell

20
Encoding.GetEncoding("UTF-8").GetBytes(chararray);

我不确定,但是两个具有不同规范化的字符串可能会编码为相同的字节。这可能是需要的,也可能不是需要的。(我认为在问题指定的范围内,这一点并不重要。) - Jodrell
@Alexander,根据您的输入范围,这将生成与.Select(c => (byte)c).ToArray()相同的哈希值。 - Jodrell
1
Encoding.UTF8.GetBytes(chararray); - Vinigas

8

我喜欢这个版本:

 System.Text.Encoding.UTF8.GetBytes(chararray);

与上文差不多


7

为您的需求而言,编码是不必要的,但它可能更方便。

相反,您可以这样做,

sha.ComputeHash(validator.SelectMany(BitConverter.GetBytes).ToArray());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接