字节维吉尼亚密码,解密错误

2024-01-02

我必须编写一个对完整字节进行操作的 Vigenere 加密/解密函数(通过 tcp 加密和发送文件,然后在另一端解密)。 我的加密功能似乎正在工作(或多或少,如果没有解密功能就无法真正测试它)。

这是加密函数的代码:

public static Byte[] encryptByteVigenere(Byte[] plaintext, string key) 
{

    Byte[] result= new Byte[plaintext.Length];

    key = key.Trim().ToUpper();

    int keyIndex = 0;
    int keylength = key.Length;

    for (int i = 0; i < plaintext.Length; i++)
    {
        keyIndex = keyIndex % keylength;
        int shift = (int)key[keyIndex] - 65;
        result[i] = (byte)(((int)plaintext[i] + shift) % 256);
        keyIndex++;
    }

    return result;
}

然而,即使以几乎相同的方式编写解密函数,也会导致错误。 “尝试除以零。”

解密函数代码:

public static Byte[] decryptByteVigenere(Byte[] ciphertext, string key)
{
    Byte[] result = new Byte[ciphertext.Length];

    key = key.Trim().ToUpper();

    int keyIndex = 0;
    int keylength = key.Length;

    for (int i = 0; i < ciphertext.Length; i++)
    {             
        keyIndex = keyIndex % keylength;
        int shift = (int)key[keyIndex] - 65;
        result[i]= (byte)(((int)ciphertext[i] + 256 - shift) % 256);
        keyIndex++;               
    }

    return result;
}

错误点位于该行 keyIndex = keyIndex % 密钥长度; 但令我惊讶的是,第一个函数中的代码几乎相同,而且似乎没有造成任何麻烦。我正在对收到的字段进行测试,该字段在没有加密的情况下正确到达。有人能帮我吗?

编辑: 使用解密函数代码的方法/线程:

public void fileListenThread()
{         
    try
    {
        fileServer.Start();

        String receivedFileName = "test.dat";
        String key = (textKlucz.Text).ToUpper();

        while (true)
        {
            fileClient = fileServer.AcceptTcpClient();
            NetworkStream streamFileServer = fileClient.GetStream();
            int thisRead = 0;
            int blockSize = 1024;
            Byte[] dataByte = new Byte[blockSize];
            Byte[] dataByteDecrypted = new Byte[blockSize];

            FileStream fileStream = new FileStream(receivedFileName, FileMode.Create);
            while (true)
            {
                thisRead = streamFileServer.Read(dataByte, 0, blockSize);
                dataByteDecrypted = Program.decryptByteVigenere(dataByte, key);
                fileStream.Write(dataByteDecrypted, 0, thisRead);
                if (thisRead == 0)
                     break;
            }

            fileStream.Close();                 
        }
    }
    catch (SocketException e)
    {
        MessageBox.Show("SocketException: " + e, "Wystąpił wyjątek", MessageBoxButtons.OK, MessageBoxIcon.Error);               
    }
}

好吧,问题确实是发送/接收方法,而不是函数本身。我仍然不知道是什么导致了问题,但重写函数有所帮助。感谢您的输入!

我将其留在这里,以防将来有人需要这样的功能......尽管这是相当微不足道的事情。

Cheers.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字节维吉尼亚密码,解密错误 的相关文章

随机推荐

  • 使用 SqlDataReader 获取二进制数据

    我有一个名为 Blob Id int Data Image 的表 我需要使用 SqlDataReader 来获取该图像数据 请注意 我不想将 Response Binarywrite 数据发送到浏览器 我只需要该二进制数据作为 byte 即
  • 图表宽度问题

    我正在开发一个项目 该项目的设计与fiddle http jsfiddle net uBUv9 1 左侧的侧边导航带有切换选项 图表位于右侧 发生的事情是图表响应能力非常棒 并且当我调整窗口大小时它是完美的 但在我的项目中 我有一个切换按钮
  • 通过 USB 安装应用程序:设备暂时受到限制

    当我打开通过 USB 安装在开发者模式下 它会弹出 toast 消息说该设备暂时受到限制 然后关闭设置 有什么解决办法吗 我搜遍了诸如关闭MIUI优化之类的办法还是不行 我无法通过Android Studio以这种方式调试我的应用程序 通过
  • 在 Android 中更改 Flutter 的表情符号字体

    Android 有可怕的表情符号 我可以在 Android 版 Flutter 中使用 Apple 的表情符号字体 就像 Telegram 和 WhatsApp 过去使用的那样 吗 编辑 我的第一个猜测是添加字体 但由于我不想更改所有其他字
  • 使用 javax.lang.model 或 ANTLR JavaParser 获取 Java 源代码信息的示例/教程

    我想为简单的 Java 逻辑创建一个自动的类似流程图的可视化 为此我需要解析 Java 源代码 我有 2 个候选者 ANTLR http www antlr org and javax lang model http download or
  • 父级上的 maxHeight 和 Overflow-y:在其子级之一上滚动

    可以设置maxHeight在父母身上并且有one特定子项 1 占用尽可能多的可用空间并且 2 有overflow y scroll对那个孩子下定决心 div style max height 200px div Header that I
  • 使用 Rails 3.1 预编译资源

    我正在推动 Heroku 的更改 我得到 耙子中止 无法连接到服务器 连接被拒绝服务器是否在主机 127 0 0 1 上运行并接受端口 5432 上的 TCP IP 连接 当我查阅 Heroku 文档时Here http devcenter
  • Android libgdx 大屏幕分辨率

    我如何支持 制定算法 libgdx以支持多种屏幕分辨率 我使用带有如下参数的 if 语句使我的应用程序在 HTC Tattoo 上运行 if Gdx input getX 40 让它在更大的屏幕上运行的好算法是什么 我尝试了这个但没有任何结
  • 当两个对等点同时将更改推送到同一个远程时 git 如何工作

    我是 git 的新手 我通常使用具有中心存储库的 P4 而 git 是分布式 VCS 我对当两个对等点同时将更改推送到同一个远程时 git 如何工作感兴趣 假设每个对等点在推送之前解决了所有冲突 我估计如果git报冲突的话后面的会被拒绝吧
  • 将变量从 jQuery 传递到 PHP

    我创建了一个脚本来读取哈希值 www website com hash 并将哈希值传递给 php 这alert hash 弹出哈希值 但哈希值没有在 post 变量中回显 知道为什么吗 jQuery 页面 Community php 页面
  • 如何在 IIS 环境中以编程方式注册 WCF 服务

    假设我们有 2 个具有以下布局的项目 Project web global asax 我想到了这个注册目的地 例如void Application Start System Object sender System EventArgs e
  • NGINX SSL 证书权限 SSL 错误:0200100D:系统

    使用 LetsEncrypts 免费 SSL 证书时 NGINX 服务器中出现以下错误 2016 06 23 19 53 13 警告 5013 0 仅当主进程以超级用户权限运行时 user 指令才有意义 在 etc nginx nginx
  • 实体框架代码优先:使用注释设置一对一外键关联

    我有以下两个实体 我试图使用外键关联来关联 一对一 public class StandardRack public int Id get set public StandardRelay StandardRelay get set pub
  • XPath 1.0 选择兄弟姐妹的不同属性

    我到处寻找 但没能找到任何可行的想法 这些是我在 xml 文件中的几个节点 从数据库生成
  • 在sql server中使用LIKE通配符进行查询

    我想在我的 ASP NET Web 项目中执行小型 SQL 服务器搜索 我的数据库不大 所以我认为最好不要使用全文搜索 我想执行一个简单的搜索 如下所示 select from mytable where columnA LIKE some
  • 使用 JDBC 和 MySQL 解决“通信链路故障”[重复]

    这个问题在这里已经有答案了 我正在尝试连接到本地 MySQL 服务器 但不断收到错误消息 这是代码 public class Connect public static void main String args Connection co
  • Spring在使用@Value注解时到底是如何注入属性的?

    我一直想知道 Spring 在使用时到底是如何注入属性的 Value注解 检查字段是否具有注释的机制是什么 是使用反射和某个类来查找所有带注释的类并创建它们的实例来注入属性 还是以其他方式执行此操作 我知道注释处理只会在编译期间使用 不会更
  • 管理员用户的活动管理员登录仅在本地主机上的 Chrome 中重定向回具有正确凭据的登录页面

    我只在 Chrome 本地遇到这个问题 在生产环境中没有遇到这个问题 在 Safari 或 Firefox 中这也不是问题 我不确定是什么导致了这个问题 因为我最近唯一的更改是添加 Redis Sidekiq 来异步处理作业 这似乎不相关
  • Git 扩展存储了错误的凭据[重复]

    这个问题在这里已经有答案了 我的用户名和密码存储在 Git 扩展内部的某个位置 一段时间后 需要再次提供用户名和密码 我多次给出错误的密码 现在 如果我想拉一些东西等 我会收到fatal Authentication failed 我无法提
  • 字节维吉尼亚密码,解密错误

    我必须编写一个对完整字节进行操作的 Vigenere 加密 解密函数 通过 tcp 加密和发送文件 然后在另一端解密 我的加密功能似乎正在工作 或多或少 如果没有解密功能就无法真正测试它 这是加密函数的代码 public static By