问题标签 [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.
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“主机”应用程序
汉语水平考试
c# - 三重 DES 加密
请注意,我在这里遇到的问题是密钥大小。起初,根据以下代码中包含的注释,我认为我的密钥需要是 24 字节(192 位)。这没有用,所以我试了一下 16、32 和 8 字节键 - 似乎没有任何效果。“不工作”是指在我的文本被加密和解密后,它的值与我的原始文本不同。
例子:
原文: 'Example test this should work '
加密文本: ¸¹pÕô6
解密文本: 'Example '
这是我正在使用的两个函数(加密/解密函数)。我还将包括我如何调用每个函数。
感谢您的任何帮助,
埃文
java - Java 中的 DES 实现:密钥生成阶段出错
我是一名学生,正在做一个小型项目 - DES 实施。我之前对将 64 位密钥转换为 56 位密钥有疑问,并且可以成功地做到这一点,这要归功于这里收到的一些指导。
我将我的实现分为密钥生成阶段(我为 16 轮中的每一轮生成一个新密钥)和加密阶段。
但是,我无法生成正确的密钥。我使用“abcdefgh”作为键手动做了一个示例,但我无法在我的程序中重现结果。
DES 密钥生成阶段包括:
将 56 位密钥分成 2 个 28 位密钥。我将 28 位存储在 4 个字节中为
leftkey28[4]
(后 4 位为 0)&rightkey28[4]
(前 4 位为 0)这 28 位组使用(原始算法中的<< 1 & << 2)进行左循环移位,然后组合得到一个新的 56 位密钥。但是,因为这个问题,我暂时放弃了左移2,只是左循环1。而且,这个问题的根源仍然无法追踪。
问题似乎Round#2 Byte#2
在我的输出中。
对于找出根本原因的任何指导或提示,我将不胜感激。( PS 我以前从来没有做过这么多的位操作!代码没有根据 Java 规则/约定进行优化或编写,因为我只是想让它在做任何其他事情之前工作)
提前致谢。
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 函数之后。
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
谢谢!!
c - 如何检查 DES 密钥的奇偶性?
我正在我的密码学课程中研究 DES(数据加密标准)算法,作为其中的一部分,我必须编写一个 C 代码,其中包含一个检查 DES 密钥奇偶性的函数。
我怎样才能做到这一点?
cryptography - 挂起来自 libgcrypt->libgpg-error 的“弱加密密钥”警告
我在使用 libgcrypt 进行加密时使用了弱密钥,并且我从 libgpg-error 作为“弱加密密钥”到 stderr 收到了关于它的适当警告。问题是我正在将 std:err 读入 GUI,我不想在其中看到它们(只是因为它们太多了)。我可以在 GUI 中过滤 stderr 输入,但我更喜欢的方法是以更智能的方式抑制警告。不幸的是,我不知道如何实现这一目标。在阅读 libgcrypt 文档时,我发现它只允许暂停安全内存警告。阅读 libgpg-error 源代码我没有发现任何有用的东西。
您的建议将不胜感激。
提前致谢。简
.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 加密技术加密数据的正确方法吗?
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...?难道我做错了什么?