【发布时间】:2015-11-12 17:12:52
【问题描述】:
我正在用 c# 制作一个 vigenere 加密程序,我想生成一个随机密钥,但我想先解决这个问题。
所以在我的 V 类中我有一个方法:
class V
{
public static string GenerateKey(int length)
{
StringBuilder key = new StringBuilder();
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] rnd = new byte[1];
int i = 0;
while (i < key.Length)
{
rng.GetBytes(rnd);
rnd[0] %= 64;
if (rnd[0] < 62)
{
++i;
key.Append((byte)((rnd[0] <= 9 ? '0' : rnd[0] <= 35 ? 'A' - 10 : 'a' - 36) + rnd[0]));
}
}
return key.ToString();
}
在我的 MainClass 类中,我有 Main 方法,其中包含:
Console.WriteLine(V.GenerateKey(10));
但它在编译时不会产生任何东西,只是一个空白控制台,我还是 C# 的新手,所以请不要被任何错误冒犯。
【问题讨论】:
-
你的意思是
i不是n在 while 循环中? -
您希望密钥有多长?你有指定这个吗?目前循环上升到
key.length,开头为0。 -
sorry yes n 在 while 循环中应该是 i @SanjayManohar
-
学习调试。设置断点,单步执行代码并检查相关变量。
-
为什么不直接创建一个所需长度的字节数组并让 .GetBytes 一次性完成所有工作?