TripleDES 加密和解密给出奇怪的结果

2023-12-05

我有一个有效的实施TripleDESCng(针对一些测试向量进行测试),但会发生以下情况:

当我加密纯文本时This is a sample message(24 字节,因此这将是 3 个块)(十六进制为5468697320697320612073616D706C65206D657373616765)用一个示例键,我得到E81F113DD7C5D965E082F3D42EC1E2CA39BCDBCCBC0A2BD9。但是,当我使用相同的示例密钥解密它时,我得到5468697320697320612073616D706C650000000000000000,当转换回 ASCII 时,为:

This is a sample.

除了我的代码之外,还有什么原因会导致这种行为吗?为了加密和解密,我使用 24 字节密钥(ECB 模式)。

EDIT:

using (var tripleDES = new TripleDESCryptoServiceProvider())
{
   byte[] data = ASCIIEncoding.ASCII.GetBytes("This is a sample message");
   Console.WriteLine(BitConverter.ToString(data));
   tripleDES.IV = new byte[tripleDES.BlockSize / 8];
   var encryptor = tripleDES.CreateEncryptor();
   byte[] result = new byte[data.Length];
   encryptor.TransformBlock(data, 0, data.Length, result, 0);
   var decryptor = tripleDES.CreateDecryptor();
   byte[] result2 = new byte[result.Length];
   decryptor.TransformBlock(result, 0, result.Length, result2, 0);
   Console.WriteLine(BitConverter.ToString(result2));
}
Console.ReadLine();

With almost all modes1, you should make sure that the final part of your data is pushed through TransformFinalBlock rather than TransformBlock2, to make sure it knows that no more data is coming and to ensure final blocks are flushed/written.

一般来说,假设输出大小将与输入大小匹配是不好的形式。

模式不是问题,IV 都设置为 0

Yes, that'll mean that the first block was not affected by your choice of Mode. But all subsequent blocks will be, because they will use the chaining mode and the previous block, not the IV. So if you want ECB (you shouldn't3) you need to explicitly set that mode.


1Your code is using CBC, not EBC as you claim in your narrative. CBC is the default mode for .NET encryption classes.

2And when using this second method, pay attention to it's return value, as mjwills commented.

3You've picked an outdated crypto algorithm, paired it with an outdated mode of operation, and your words I've quoted above mean that you don't understand modes. Added together, I would suggest that you're not well placed to be writing code that uses crypto currently. The .NET classes can make it seem easy to write crypto code but you still have to understand how to make good choices in using them. Better to spend more time on researching these things before writing code.

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

TripleDES 加密和解密给出奇怪的结果 的相关文章

随机推荐

  • 将经典 ASP 请求路由到 .NET - SEO 重定向

    我们正在用 NET 3 5 解决方案替换旧的经典 asp 网站 我们需要将所有经典 ASP 请求重定向到 aspx 页面 即 contactus asp 现在可能路由到 contact us default aspx 我想要的是点击 glo
  • Magento:在主页上显示新产品

    我正在开发我的第一个 Magento 项目 我想将新产品展示到首页 我已经研究并添加了这段代码 block type catalog product new column count 6 products count 3 name home
  • 如何从 std::cin 读取直到流结束?

    我的问题是 我想读取输入std cin但不知道输入有多长 我也必须char并且不能使用std string 我必须处理两种方法 a 用户输入文本 当他点击 ENTER 时 程序停止读取 b 用户重定向std cin到一个文件 例如 a op
  • 使用通用 EventHandler<> 的事件在设计器中不可见

    我刚刚注意到 如果我使用通用事件处理程序将事件添加到我的 UserControl 则当我将用户控件添加到表单时 该事件在设计器中不可见 public event EventHandler
  • Flask请求:确定确切的路径,包括是否有问号

    有没有办法确定向服务器请求的路径 包括它是否包含问号 应用程序 from flask import Flask Response request def root return Response f full path request fu
  • 创建多个输出文件时将输出文件写入不同的目录

    我正在使用 fortran 95 我有一个非常类似于的问题访问主程序子目录中的文件 我遇到的另一个问题是 我使用以下命令循环创建文件 write fn fmt a i0 a degseqA filenumber dat open unit
  • C typedef 结构体指针

    我遇到过以下代码 typedef struct double x double y double z vector 这是有效的类型定义吗 代码编译并运行良好 我只是好奇这是否是常见做法 绝对有效 通常 您可以通过一起定义两种类型来充分利用这
  • 在 Windows 7 上使用外部程序时,git diff tmp 文件在 Windows 上无效

    我正在关注来自的文档Git配置页面并尝试将其应用到我的 Windows 7 环境中 当我运行 git diff file0 时 我在 P4Merge 中收到错误 Errors tmp cH9ccM file0 is or points to
  • 使用 EL 动态访问 Bean 属性

    我需要在 JSP 页面中使用 EL 访问其名称存储在变量中的 bean 的属性 如果我要访问名为 description 的属性 那么我会访问 bean description 但由于该属性的名称存储在变量 name 中 我不知道如何在 E
  • JavaMail 中的 HELO 名称无效

    使用 JavaMail 发送邮件时出现以下错误 这是不寻常的 因为它已经工作了一段时间 直到现在还没有做出任何改变 550 Access denied Invalid HELO name See RFC2821 4 1 1 1 com su
  • Jhipster / md-button 不是已知元素

    你好我正在使用 JHipster 4 0 1 我想将 Angular 2 材料集成到我的 home component 中 我做了 npm 安装材料 npm install angular2 核心 按钮
  • 意外的阴影和“已删除[符号]”

    如果您对以下代码求值两次 结果将会不同 谁能解释一下发生了什么事吗 findHull points Module Needs ComputationalGeometry ConvexHull points findHull RandomRe
  • 将 javascript 变量发送到 django 视图

    我正在 JavaScript 变量 例如 var url 中获取浏览器的当前 url 不断变化 我有一个 django 模型 Url 我想使用视图函数创建它的对象create url 早些时候当我使用表单时 我使用request POST
  • 如何从服务检查新的 android 6.0 权限

    我有一个 Android 6 0 应用程序 其未绑定的 Android 服务连接到 Google API 以接收 Fused API 位置提供商更新 为此 我需要 ACCESS FINE LOCATION 权限 一切都工作正常 直到更新到棉
  • WebSphere MQ 7.1 帮助需求 - 访问或安全性

    我想在 WebSphere MQ 服务器上创建一个队列管理器和一个队列 并且我想做两件事 1 使用 WMQ Explorer 从客户端访问队列管理器和队列 2 编写一个在客户端上运行的 Java 独立应用程序 并从队列中放入和接收消息 但是
  • 为画布上的矩形设置 zindex 不会将其置于前面

    我对画布和在其上绘制的矩形有疑问 他们以相反的创建顺序获得事件 最新的在顶部 而不是 zindex 的顺序 我已将 ItemsControl 与资源列表绑定 然后有一个画布作为项目面板
  • 是否有微数据标签来指定值是数字、字符串还是布尔值?

    有一个 HTML5 属性称为datetime指示值类型是日期时间 但我看不出有什么办法可以表明是否itemprop值在spantag 是字符串 布尔值或数字 我认为没有办法将此类信息包含在微观数据中 对吗 如果是这样 是否有某种原因应省略此
  • PHP解码json

    这里有人可以帮我用 php 解码 json 吗 我正在尝试解码 json api url 这是我现在所拥有的 string username someusername unconfirmed reward 0 08681793 send t
  • 通过 api/cli 启用和禁用 S3 复制规则

    我已在 S3 存储桶上设置了复制规则 以填充 preprod 存储桶以进行测试 这意味着我希望能够轻松地打开和关闭复制 并可能根据需要转储和刷新复制存储桶 我正在为此创建一个脚本 但很难找到一种在使用 AWS 控制台之外轻松打开和关闭复制规
  • TripleDES 加密和解密给出奇怪的结果

    我有一个有效的实施TripleDESCng 针对一些测试向量进行测试 但会发生以下情况 当我加密纯文本时This is a sample message 24 字节 因此这将是 3 个块 十六进制为546869732069732061207