繁体   English   中英

使用C#从event.message.text返回的字符串进行3des解密

[英]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)

问题是现代加密算法作用于字节,并返回一个密文,其中每个字节可以具有任何值 这意味着密文也可能包含不代表任何字符的字节。 换句话说,密文不是真正的文本

因此,您可以做两件事:

  1. 继续将密文作为字节或字节流处理;
  2. 将密文编码为二进制编码(例如base 64)并在解密之前解码。

最好将密文保留为二进制,但是如果与系统其余部分的接口(在本例中为Message )需要文本字符串,则并非总是可能的。


您的错误与此无关,但是,如果您遵循上述建议,则不再需要utf8.GetBytes

您应该使用单个参数GetBytes方法来摆脱编译错误,但是您的代码在运行时仍然会失败(尽管它成功,因为偶然生成了正确的字节)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM