RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1472429
Accepted
User12351259599491
User12351259599491
Asked:2022-11-30 02:25:09 +0000 UTC2022-11-30 02:25:09 +0000 UTC 2022-11-30 02:25:09 +0000 UTC

如何在 C# 中生成随机字节串?

  • 772

主题。我正在尝试将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)))>,对我没有任何作用

python
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    aepot
    2022-11-30T03:07:38Z2022-11-30T03:07:38Z

    对于密码学,可以使用强 PRNG RandomNumberGenerator。

    如果我正确理解代码,它会变成这样

    private static string ToUrlSafeBase64(byte[] bytes, bool trimPadding = false)
    {
        string result = Convert.ToBase64String(bytes)
            .Replace('+', '-')
            .Replace('/', '_');
        return trimPadding ? result.TrimEnd('=') : result;
    }
    
    string base64key = ToUrlSafeBase64(RandomNumberGenerator.GetBytes(32));
    byte[] bytes = Encoding.UTF8.GetBytes(base64key);
    byte[] hash = SHA256.HashData(bytes);
    string base64 = ToUrlSafeBase64(hash, true);
    Console.WriteLine(base64);
    

    控制台输出示例

    -XQ8VkSPUMFDW8m9d_xnzPYvFhrordTV-TUQConvVbE
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5