gpt4 book ai didi

c# - AES 64 key 生成

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:55 24 4
gpt4 key购买 nike

我正在尝试生成 64 个十六进制数字以用作 AES 256 key ,但没有成功。有人可以指出错误以及产生相同错误的更好方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Security.Cryptography;

namespace Test
{
public class Program
{
static System.Text.StringBuilder builder = new System.Text.StringBuilder();
public static void Main(string[] args)
{
String randomNumber = Convert.ToBase64String (GenerateRandomNumber(32));
Console.WriteLine(randomNumber);

string input = randomNumber;
char[] values = input.ToCharArray();
foreach (char letter in values)
{
// Get the integral value of the character.
int value = Convert.ToInt32(letter);
// Convert the decimal value to a hexadecimal value in string form.
string hexOutput = String.Format("{0:X}", value);
// Console.WriteLine("Hexadecimal value of {0} is {1}", letter, hexOutput);
builder.Append(hexOutput);
}

Console.WriteLine(builder);
}


public static byte[] GenerateRandomNumber(int length)
{
using (var randomNumberGenerator = new RNGCryptoServiceProvider())
{
var randomNumber = new byte[length];
randomNumberGenerator.GetBytes(randomNumber);
return randomNumber;
}
}
}
}

最佳答案

您最大的技术问题是您使用了 {0:X} 而您的意思是 {0:X2}。如果值为 10,则前者生成“A”,后者生成“0A”。由于您丢失了所有内部零所在的位置,因此您的数字无法恢复。

internal static string ByteArrayToHex(this byte[] bytes)
{
StringBuilder builder = new StringBuilder(bytes.Length * 2);

foreach (byte b in bytes)
{
builder.Append(b.ToString("X2"));
}

return builder.ToString();
}

(代码复制自 https://github.com/dotnet/corefx/blob/7cad8486cbabbce0236bdf530e30db7036335524/src/Common/tests/System/Security/Cryptography/ByteUtils.cs#L37-L47 )

但也很不清楚您为什么要通过 Base64+ToCharArray+ToInt32 重新路由。您将 0-255 范围(字节)中的值替换为 [A-Za-z0-9/=+] 范围集中的值,相当于 0-63(Base64 和所有);所以你 a) 不会有一个非常随机的 key b) 它会太长。

关于c# - AES 64 key 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com