C#使用带有密钥的随机数gen来解决加密消息,但我无法将消息保存在字符串中



对于我今天遇到的问题,它以字符串数组的形式出现。此分配的目标是使用种子值为243的Random作为密钥来访问22行中的隐藏消息。在这22行中有5个字母组成一个单词。这里有22行,每行包含60个字符,目标是使用键从每行中选择5个字母。

String[] line = { "<?JRrP*h^vtVc^ppOZI@PCAa{ (n1>&VSf~59eI7Tn5We^77O/CEvgdq}gU0",
"G;t@o=#|^ZWV01`a-h{=Js>!z`_j!&7PB9nCgtfHZ:WtWk4e&#k5i7uV{$E/",
"]7zXf&4uA=n8!Sa08IIoKyc~:#d*T8FcOWjB?~QQ =Ch(S37UT>RYobbSz>@",
"w*A)v5gHh>p9vvVeUzvfmMT~tr)8s(nC`11Lz:qhjjN6c$Z ^T,W$VQqUB/#",
"+NSrOLhed*2;)$z#}=;t7FY?z6?e^?cX+nf;6me6Kt|TBpN ZNr7&9j t4c8",
"-N&E2X/:<_k0W$HpH${*f?M0K_Qp##F!)M){nVAu`4bzab_too;m8YPm!tyR",
"s=69 j&*yLRpb2IR[RNg~O!ZfUhr{czx]mbB}Hau]T(CtI-%0}1NFeRV<ZRb",
"!U-]QY4sN&S2pW+JGaenHc?|)KQJ:,&Cu}s'GIp:59U)J~]n&(/^s6:=htS ",
"'iXi 0;qbk#|kn&/-5Q*mbC2|FN_bVp6tk3K_3):bj+#%1 I/+0 ]I6CEFDX",
" [/,2k( 7ZNy,7GlV@,kk$PVEpXKTn&8mPX&[~o9)q2S]6rs!3k$:i$]*WeA",
"3[KGT5+Z^@FWPt aq{y/|2I@#!}5Kzz$9M&LFieF*8f_l4RGuBie]UD!2+Dh",
"7u.qDs=#k5:' S$dKiRmMU>)1lFb)%:;EL/4)#:Juu[_'a1)Q_TGWUe`V%QW",
"zZxtz~aOCoZGN(vny]#N[=1IOqbnGN]iQbN;Vtc' od`$-xN^&ex##z]HO )",
"<q(t2VukYZf%yyNzWODBw40wgc!Nfpr&]Yj- oNM6-t#^`h(R %o+s0'af-N",
"Ut$gg@F?/@Bg!v+j>,aedrzekyzhebJpb wo(-:>:hw1]<v3hEgU%&h]J=zm",
"D]uLuP$ ~;b1pBk% usN#f #ytk[6:Di1Lx[hK;,7u4mbVca:b[` bk]]qQ ",
"dHicvw De/<SM{7+QR@n0iAR^bUe_;}uy;Fr,PUiV?8*F(37a`++Q.nZ&6%3",
"Bcc-1EY1UG} {a on6,UN=P~/rDjKkguKBG<[*xsM#akb+/zA}gn*Nc$hc}>",
" ndhw'TX-O4f=* LZc<#cHIL#xk|]BSv+Z!^<s-ZUUlpi!Q~F7IimyZVD7de",
":Vzi{=[b)HEaV`M-[Wb#FlVFxNN0 I9. G?}Z#tKDmu|'gM LLzlT->M TpL",
"mKb^.+i/@NRXa7]XuX>1!gbR LOQ(q}%1H]x+.mz:=D}xB*<$eWDj_J%g/0a",
"[{&NOLF9YcL^iCvcBcY+A2LB:UoQ|V1{s,?>7krK{pb@8w]pgfa#U$tHNbay" };

因为我正在处理的大部分代码都在这里。

String[] decrypted = new String[22];
var randNum = new Random(243);
int i, k;

for (i = 0; i < 22; i++)
{
String currentLine = line[i];

for (k = 0; k < 5; k++)
{
decrypted[i] = Convert.ToString(currentLine[randNum.Next(0, 60)]);

}

}
printIt(decrypted);

Console.ReadLine();
}
static void printIt(string[] decrypted)
{
var build = new StringBuilder();
for (int h = 0; h < 22; h++)
{
build.Append(Convert.ToString(decrypted[h]));
}
Console.WriteLine(build);

我正在寻找的帮助是了解如何在解密数组中成功存储每行中的5个字符。

如果我直接在嵌套的for循环中插入Console.WriteLine(decrypted[i]);,我可以获得正确的答案

然而,如果我试图在包含随机的for循环之后的任何地方拉同一行,我只能拉每行的第一个字母。

将循环更改为:

String[] decrypted = new String[110];
for (i = 0; i < 22; i++)
{
String currentLine = line[i];
for (k = 0; k < 5; k++)
{
decrypted[k + i * 5] = Convert.ToString(currentLine[randNum.Next(0, 60)]);
}
}

打印:

static void printIt(string[] decrypted)
{
var build = new StringBuilder();
for (int h = 0; h < decrypted.Length; h++)
{
build.Append(Convert.ToString(decrypted[h]));
}
Console.WriteLine(build);
}

在做了更多的研究和推断我可能缺少的东西之后,我能够解决我自己的问题。这是解决方案。

for (i = 0; i < 22; i++)
{
String currentLine = line[i];

for (k = 0; k < 5; k++)
{
decrypted[i] = decrypted[i] + Convert.ToString(currentLine[randNum.Next(0, 60)]);
//Adding the previous character to the new character to help build up the string.
}

在我意识到我没有正确地构建角色之后,我选择添加前一个角色,这解决了我的问题。

最新更新