主题。我正在尝试将python代码翻译成C#
有这么一段代码
import base64
import hashlib
import secrets
random = base64.urlsafe_b64encode(secrets.token_bytes(32))
secrets.token_bytes(32)返回包含字节数 nbytes 的随机字节字符串。
Abase64.urlsafe_b64encode()采用“类似字节的对象”。
我有这个 C# 代码
public static byte[] GetByteArray()
{
Random rnd = new Random();
byte[] b = new byte[32];
rnd.NextBytes(b);
return b;
}
但它是一个字节数组。好的。我确实BitConverter.ToString(key)得到了一行,75-A7-A0-85-D3-05-8E-.......但它与 python 文档中的不一样
>>> token_bytes(16)
b'\xebr\x17D*t\xae\xd4\xe3S\xb6\xe2\xebP1\x8b'
怎么了?我怎样才能得到相同的字符串?
更新
是的,根据python代码,我需要继续
random = base64.urlsafe_b64encode(secrets.token_bytes(32))
m = hashlib.sha256()
m.update(random)
d = m.digest()
code_challenge = base64.urlsafe_b64encode(d).decode().replace("=", "")
但我已经知道如何进行了。但我需要一个字节串。
我已经尝试使用字节数组来完成它,但它对我不起作用。
upd2
我不知道为什么我需要像\xebr\xe2\xebP1\x8b这样的一行我需要 OAuth 2.0,python 中有一个示例,我试图完全重复它。
因为当我在 C# 中生成一个字节数组时,它在 Base64 中,然后在 mySHA256 中,然后在 Base64 中,如说明中所述<URL safe Base64(SHA256(URL safe Base64(random 32 byte string)))>,对我没有任何作用
对于密码学,可以使用强 PRNG
RandomNumberGenerator。如果我正确理解代码,它会变成这样
控制台输出示例