[英]3des decryption in c# from a string returned by event.message.text
我如何正确转换输入文本以便正确解密,我收到一条错误消息:
错误CS1503参数1:无法从“字符串”转换为“字符[]”
解析解密接口的TransfromFinalBlock的第一个参数的正确方法是什么? 谢谢
private static void Bot_OnMessage4(object sender, MessageEventArgs e)
{
ICryptoTransform decrypt = des.CreateDecryptor();
String[] dd = new String[1];
dd[1]= utf8.GetString(decrypt.TransformFinalBlock(utf8.GetBytes(**e.Message.Text**, 0, utf8.GetBytes(e.Message.Text).Length)));
Bot.SendTextMessageAsync(e.Message.Chat.Id, "message to decrypt is \n" + e.Message.Text );
Bot.SendTextMessageAsync(e.Message.Chat.Id, "decrypted message is \n" + dd[1]);
您似乎已经在尝试解决问题,正确地归咎于您的意见:
utf8.GetBytes(e.Message.Text, 0, utf8.GetBytes(e.Message.Text).Length)
问题是现代加密算法作用于字节,并返回一个密文,其中每个字节可以具有任何值 。 这意味着密文也可能包含不代表任何字符的字节。 换句话说,密文不是真正的文本 。
因此,您可以做两件事:
最好将密文保留为二进制,但是如果与系统其余部分的接口(在本例中为Message
)需要文本字符串,则并非总是可能的。
您的错误与此无关,但是,如果您遵循上述建议,则不再需要utf8.GetBytes
。
您应该使用单个参数GetBytes
方法来摆脱编译错误,但是您的代码在运行时仍然会失败(尽管它会成功,因为偶然生成了正确的字节)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.