- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 C++
中的 openssl
库来解密数据。
我有 key 和 IV 以及编码的 Base64 字符串。
我无法完成文档,头文件 (openssl/des.h
) 中的所有解密方法都需要 3 个 key 。
我成功地使用以下 python 代码实现了结果。
from pyDes import *
import base64
key = base64.b64decode("****")
iv = base64.b64decode("***")
enc = base64.b64decode("******")
encryptor = triple_des(key, CBC, iv)
plain = encryptor.decrypt(enc)
print(plain.decode("utf-8"))
我想使用 C++ 代码和 OpenSSL 库获得相同的结果。
最佳答案
3DES 使用三个 key 。您正在使用的 python 函数可能从您传递的键参数中派生出三个键,可能将其分为三部分。
要使用 OpenSSL 功能,您必须生成 3 个 key ,每个 key 有 8 个字节(或将 24 字节 key 分成 3 个)。
我改编了我找到的代码here使用 ECB 而不是 CBC。但是,出于安全原因,您应该考虑使用 CBC,甚至 AES 加密而不是 3DES。
该示例仅展示如何将 DES_ecb3_encrypt
函数与硬编码 key 结合使用。在最终的解决方案中,您必须使用良好的 RNG 生成自己的 key 。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/des.h>
/* Triple DES key for Encryption and Decryption */
DES_cblock Key1 = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 };
DES_cblock Key2 = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 };
DES_cblock Key3 = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33 };
DES_key_schedule SchKey1,SchKey2,SchKey3;
/* Print Encrypted and Decrypted data packets */
void print_data(const char *tittle, const void* data, int len);
int main()
{
/* Input data to encrypt */
DES_cblock input_data = {0x01, 0x02, 0x03, 0x04, 0x05, 0x6, 0x7, 0x8};
/* Check for Weak key generation */
if ( -2 == (DES_set_key_checked(&Key1, &SchKey1) || DES_set_key_checked(&Key2, &SchKey2) || DES_set_key_checked(&Key3, &SchKey3)))
{
printf(" Weak key ....\n");
return 1;
}
/* Buffers for Encryption and Decryption */
DES_cblock cipher;
DES_cblock text;
/* Triple-DES ECB Encryption */
DES_ecb3_encrypt(&input_data, &cipher, &SchKey1, &SchKey2, &SchKey3, DES_ENCRYPT);
/* Triple-DES ECB Decryption */
DES_ecb3_encrypt(&cipher, &text, &SchKey1, &SchKey2, &SchKey3, DES_DECRYPT);
/* Printing and Verifying */
print_data("\n Original ", (const void*) input_data, sizeof(input_data));
print_data("\n Encrypted", (const void*) cipher, sizeof(input_data));
print_data("\n Decrypted", (const void*) text, sizeof(input_data));
return 0;
}
void print_data(const char *tittle, const void* data, int len)
{
printf("%s : ",tittle);
const unsigned char * p = (const unsigned char*)data;
int i = 0;
for (; i<len;++i)
printf("%02X ", *p++);
printf("\n");
}
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
DES_key_schedule *ks1, DES_key_schedule *ks2,
DES_key_schedule *ks3, int enc);
DES_ecb3_encrypt() encrypts/decrypts the input block by using three-key Triple-DES encryption in ECB mode. This involves encrypting the input with ks1, decrypting with the key schedule ks2, and then encrypting with ks3. This routine greatly reduces the chances of brute force breaking of DES and has the advantage of if ks1, ks2 and ks3 are the same, it is equivalent to just encryption using ECB mode and ks1 as the key.
关于c++ - openssl 3des 与 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56774274/
我正在尝试使用 DES API 来实现 3Des,如下所示: des(input, output, key, mode) 其中输入、输出和 key 各为 8 个字节,模式标识加密和解密类型。我想知道是
有人比较这些加密算法的优缺点吗? 最佳答案 使用 AES。 更多详细信息: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性而言太短(56 个有效位;这可以被暴力破解,如 m
我收到了来自Java的加密字符串,我可以看到Java加密的源代码。我用C#编写了解密代码。但总是在“FlushFinalBlock”处报错。错误消息:“System.Security.Cryptogr
我应该使用加密 DES-EDE3-CBC。这是否意味着它是密码 block 链接模式下的 Triple DES? 最佳答案 是的。 EDE 部分告诉您使用 3DES 的特定变体(无论如何,每个人都默认
有没有人一起比较这些加密算法的优缺点? 最佳答案 使用 AES。 更多细节: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性来说太短了(56 位有效位;这可以被强制执行,正
我在整个网络上寻找这个问题,但找不到明确的答案: 我有一些使用 DESCryptoServiceProvider(Mode = CRC,Padding = none)的 C# 代码,并且我正在使用 o
嗨,大家好,我有 java 代码,它为我生成三重加密代码,现在我尝试使用 crypto-js 在 javascript 上使用它,但这两个代码提供了不同的 key ,我不知道为什么以及如何获得相同的
我需要在我的 Erlang/OTP Web 服务器和 JavaScript 之间传送加密数据。我已经 checkout Crypto-js.js Library 。我想使用 DES 加密我的数据 在
我发现了一个问题,Elephantik 的答案基本上回答了我的问题: DES Initialization Vector in C# 我有一个使用 DES.EXE 命令行工具加密的文件。我可以使用以下
我正在努力让 Java 代码输出与 C# 代码相同的 Byte[]。 C# 代码: using System; using System.IO; using System.Security.Crypt
我从第三方公司收到了一些 DES 加密的东西。我无法用 ruby 解密它。但它适用于我的 java 代码。 这里是java代码: public class Main { public static v
它似乎混淆了 Triple-DES(>128 位)和普通 DES(64 位)。我正在尝试使用 Java 1.5 使用 Triple DES(或 DESede)加密 Derby 数据库 我找到了这个 d
我遇到了编码问题。我想在 HTML 文件中添加法语口音。 我在 Ubuntu 上,我的编辑器是 SciTE。 这是一个 Ruby on Rails 程序。 ActionView::WrongEncod
这个问题已经有答案了: Error parsing XHTML: The content of elements must consist of well-formed character data
我需要加密 ISO 8583消息...这里的问题是消息比 key 长。我需要有人帮我加密这个字符串。 例如:我的字符串中有 300 个字符;我应该单独加密每 16 个字符然后连接它们,因为我的主 ke
我想知道在下面的代码中是否添加了 PKCS#5 填充?如果不是如何添加? $message = "insert plaintext message here"; $iv = pack('H*', '
我已经使用内置库在 Java 中编码了 DES,但我没有得到正确的加密结果。请解释一下我在哪里犯了错误 import javax.crypto.Cipher; import javax.crypto.
在下面,您将看到一个简单的 Java Card 小程序,它被编写为使用不同的 DES 和 3DES 算法加密和解密数据。 这些是支持的命令: 00 C0 00 00 | key 长度 | KeyVal
我在我的应用程序中使用 DES-ECB + base64 加密。这就是我称之为“Crypto”的类的代码 public class Crypto { public static string
我创建了一个 Android 应用程序,它从安装在智能手机上的传感器读取数据,并将这些数据以 JSON 格式发送到应用程序服务器。 我将服务器和 Android 应用程序配置为通过 https 协议(
我是一名优秀的程序员,十分优秀!