问题标签 [des]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5289 浏览

java - ISO 9797 填充方法 2 和 java 中的 MAC 生成

我希望你们中的一些人可以在这个问题上帮助我。

我使用 SmartCardShell 程序运行了一个 javascript 代码,该代码从英国电子护照中提取数据。

我正在尝试为我的论文复制 Java 中的代码。但是,我对 MAC 一代感到困惑。

数据加密和 MAC 生成的 javascript 代码是:

我设法正确验证了我的加密密钥(Kenc)是否正确生成。

离开脚本代码,MAC 密钥 (Kmac) 也是一个三重 DES 密钥,通过以下方式完成:

如上所示,javascript 代码使用 Kmac 密钥、DES_MAC_EMV 机制“签署”数据,并使用 ISO 9797 填充方法 2 填充密码数据——我相信这称为“位填充”。

谁能帮助我创建/向我解释 DES_MAC_EMV 机制和 ISO 9797 填充方法 2 的 Java 等效项?

感谢帮助

只是补充一下,因为我忘了提到它,我正在创建一个系统来连接到电子护照并提取数据。此刻,我正在验证从 SmartCardShell 程序/javascript 代码中获得的数据。这不是 javacard 小程序/应用程序,它只是一个 Java“主机”应用程序

汉语水平考试

0 投票
3 回答
7043 浏览

c# - 三重 DES 加密

请注意,我在这里遇到的问题是密钥大小。起初,根据以下代码中包含的注释,我认为我的密钥需要是 24 字节(192 位)。这没有用,所以我试了一下 16、32 和 8 字节键 - 似乎没有任何效果。“不工作”是指在我的文本被加密和解密后,它的值与我的原始文本不同。

例子:

原文: 'Example test this should work '

加密文本: ¸¹pÕô6

解密文本: 'Example '

这是我正在使用的两个函数(加密/解密函数)。我还将包括我如何调用每个函数。

感谢您的任何帮助,

埃文

0 投票
3 回答
2120 浏览

java - Java 中的 DES 实现:密钥生成阶段出错

我是一名学生,正在做一个小型项目 - DES 实施。我之前对将 64 位密钥转换为 56 位密钥有疑问,并且可以成功地做到这一点,这要归功于这里收到的一些指导。

我将我的实现分为密钥生成阶段(我为 16 轮中的每一轮生成一个新密钥)和加密阶段。

但是,我无法生成正确的密钥。我使用“abcdefgh”作为键手动做了一个示例,但我无法在我的程序中重现结果。

DES 密钥生成阶段包括:

  1. 将 56 位密钥分成 2 个 28 位密钥。我将 28 位存储在 4 个字节中为leftkey28[4](后 4 位为 0)& rightkey28[4](前 4 位为 0)

  2. 这 28 位组使用(原始算法中的<< 1 & << 2)进行左循环移位,然后组合得到一个新的 56 位密钥。但是,因为这个问题,我暂时放弃了左移2,只是左循环1。而且,这个问题的根源仍然无法追踪。

问题似乎Round#2 Byte#2在我的输出中。

对于找出根本原因的任何指导或提示,我将不胜感激。( PS 我以前从来没有做过这么多的位操作!代码没有根据 Java 规则/约定进行优化或编写,因为我只是想让它在做任何其他事情之前工作)

提前致谢。

0 投票
2 回答
3964 浏览

php - PHP中的DES加密

我正在编写一个 Drupal 支付方式模块,在这个模块中我需要生成一个散列发送给银行。银行要求我将某些字符串编码到 DES/ECB 哈希中。他们还提供测试环境,我的问题来了。使用字符串 B7DC02D5D6F2689E 和键 7465737465703031 我应该得到结果哈希 3627C7356B25922B (当然是在 bin2hex 之后)。这是银行测试页面,我也在这个页面上检查了这个:http ://www.riscure.com/tech-corner/online-crypto-tools/des.html (加密java小程序)。

我的问题是,无论我做什么,我都无法让我的 PHP 代码提供正确的结果。这是我尝试使用的一个简单功能:

我也一直在尝试这样的事情:

这些都没有给出正确的签名。知道有什么问题吗?现在我处理这个问题超过 3 小时,所以我很感激任何帮助。我对这种加密的东西不是很熟悉。非常感谢。

顺便说一句:上面提到的那些 $hash 和 $key 是在我的代码片段开头的 strtoupper、substr 和 bin2hex 函数之后。

0 投票
2 回答
2122 浏览

c - C:DES加密问题

我正在寻找如何使用 DES 密码和 openssl 标头在 C 中编码内容的示例,我发现了这个: http: //www.codealias.info/technotes/des_encryption_using_openssl_a_simple_example

代码几乎是完美的,但我在这方面不是很专家,而且我在 C 语言中的 C 知识也不是很大,因为我在 PIC 和 AVR 微控制器上使用它......

无论如何在代码中:

如您所见, sizeof(clear) 用作字符串的大小...问题是在示例中我们知道文本字符串的大小...但是当我通过网络发送此文本时其他电脑不知道...

如何解决这个问题......我不太明白为什么我需要原始字符串的大小来解密:S

谢谢!!

0 投票
1 回答
1884 浏览

c - 如何检查 DES 密钥的奇偶性?

我正在我的密码学课程中研究 DES(数据加密标准)算法,作为其中的一部分,我必须编写一个 C 代码,其中包含一个检查 DES 密钥奇偶性的函数。

我怎样才能做到这一点?

0 投票
0 回答
1304 浏览

iphone - JAVA DES/CBC/PKCS5Padding如何加密转换成iPhone?

0 投票
1 回答
358 浏览

cryptography - 挂起来自 libgcrypt->libgpg-error 的“弱加密密钥”警告

我在使用 libgcrypt 进行加密时使用了弱密钥,并且我从 libgpg-error 作为“弱加密密钥”到 stderr 收到了关于它的适当警告。问题是我正在将 std:err 读入 GUI,我不想在其中看到它们(只是因为它们太多了)。我可以在 GUI 中过滤 stderr 输入,但我更喜欢的方法是以更智能的方式抑制警告。不幸的是,我不知道如何实现这一目标。在阅读 libgcrypt 文档时,我发现它只允许暂停安全内存警告。阅读 libgpg-error 源代码我没有发现任何有用的东西。

您的建议将不胜感激。

提前致谢。简

0 投票
2 回答
3631 浏览

.net - C# 中的 DES 密码学

我一直在尝试找出使用 DES 算法加密 byte[16] 变量的正确方法。这是场景:

  • 数据应以 8 字节部分加密。加密的关键是:byte[] {11, 11, 11, 11, 11, 11, 11, 11}
  • Instance Vector = new byte[8]前 8 个字节使用(8 个字节,值为 0)加密。
  • 加密的结果将是接下来 8 个字节的 IV。(这是CBC吗?)
  • 最后 8 个字节是我应该发送的结果。

有了这些信息,我实现了Encrypt如下方法:

这是使用 DES 加密技术加密数据的正确方法吗?

0 投票
2 回答
5013 浏览

c# - 如何使用 DES 实现 CBC-MAC?

我应该在 C# 中实现一个 MAC-CBC 生成方法,其中包含一些有关密码算法的信息。这是我所拥有的:

  • 我应该使用 DES。
  • 关键是byte[] {11, 11, 11, 11, 11, 11, 11, 11}
  • 数据(16 字节)应按 8 字节部分加密。Instance Vector = new byte[8]前 8 个字节使用(8 个字节,值为 0)加密。(加拿大广播公司?)
  • 加密值的最后 8 个字节应转换为十六进制字符串。这是我应该发送的结果。

有了这些信息,我实现了以下方法:

他们提供给我的样本原始数据是:input=byte[] {0, 6, 4, 1, 6, 4, 1, 7, E, E, F, F, F, F, B, B)应该返回 value: 的输出A7CBFB3C730B059C。这意味着加密数据的最后八个字节应该是:byte[] {167, 203, 251, 60, 115, 11, 05, 156}.

但不幸的是,使用上述方法,我得到:32D91200D0007632. 意味着我的加密数据不正确。(我的方法生成的加密值的最后八个字节是byte[] {50, 207, 18, 0, 208, 0, 118, 50})。

有什么方法可以让我知道我应该怎么做才能到达 A7CB...?难道我做错了什么?