- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 D 的 Deimos openssl header 将 D 链接到 OpenSsl,并使用 ldc 1.8.0 编译器,尝试加密字符串作为小测试。加密的字节数组与我的预期不一致。当我运行程序并加密字符串并随后解密时,我得到了原始字符串。但中间加密字节数组在代码执行之间并不一致。
所以我的问题是,这是预期的行为吗?OpenSsl 中的 AES 是否在内容中添加了某种盐,因此更难以攻击,或者这是我的错误?
import std.stdio;
import std.conv;
import std.string;
import std.outbuffer;
import deimos.openssl.aes;
void main()
{
writeln("hello world");
const auto encryption_passphrase = "foo!";
writeln("The encryption key is \"" ~ encryption_passphrase ~ "\"");
const auto encryption_content = "bar";
writeln("The to be encrypted content is: \"" ~ encryption_content ~ "\"");
writeln("The content lenght is " ~ encryption_content.length.to!string);
writeln("----------");
writeln("encrypting");
AES_KEY encryption_key;
AES_set_encrypt_key(cast(ubyte*) encryption_passphrase.toStringz, 128, &encryption_key);
OutBuffer buf = new OutBuffer();
buf.write(encryption_content);
ubyte[] inbuffer = buf.toBytes();
ubyte[] encryptedbuffer = new ubyte[inbuffer.length];
AES_encrypt(&inbuffer[0], &encryptedbuffer[0], &encryption_key);
writeln("The encrypted content is: \"" ~ (cast(char*)encryptedbuffer).fromStringz ~ "\"");
writeln("----------");
writeln("decrypting");
AES_KEY decryption_key;
AES_set_decrypt_key(cast(ubyte*) encryption_passphrase.toStringz, 128, &decryption_key);
ubyte[] outbuffer = new ubyte[inbuffer.length];
AES_decrypt(&encryptedbuffer[0], &outbuffer[0], &decryption_key);
writeln("the decrypted content is: \"" ~ (cast(char*)outbuffer).fromStringz ~ "\"");
}
最佳答案
您的代码有几个错误。
首先,您似乎将密码与 key 混淆了。鉴于您调用 AES_set_encrypt_key()
如果 key 大小为 128 位(第二个参数),则用于 key 的实际字节将是第一个参数指向的 128 位 = 16 字节。由于您的第一个参数指向以 0 结尾的字符串 "foo!"
,第五个字节之外的所有内容都将是不可预测的,并且每次运行此代码时使用的实际 key 可能会有所不同。
那么你想使用AES_encrypt()
函数“加密您的数据”,您的数据是以 0 结尾的字符串 "bar"
。但该函数实际上对固定大小 128 位 = 16 字节的 block 执行操作,与所使用的 key 大小无关。 wikipedia page about AES详细解释一下。因此该函数的输入和输出缓冲区预计都是 16 字节的缓冲区。您提供的函数参数指向错误大小的缓冲区。
代码的“解密”部分也存在同样的问题。
看看this concise C example正确使用这些功能。这可能会帮助您正确编写代码(并重新设置您对这些函数的实现目的的期望)。要以正确的方式实现您实际想要的内容,请参阅 OpenSSL wiki 页面 EVP Symmetric Encryption and Decryption 。我没有D
的经验编程,但乍一看,Deimos openssl 绑定(bind)似乎提供了所需的所有功能。
关于openssl - d openssl aes 加密字节数组在执行之间不是恒定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546894/
要求: 我们在数据库中有值 Chennai Baroda Bangalore New Delhi São Paulo, Lisboa San Jose 等... 所以我想将这些字符串转换成一个唯一的短
我需要通过 TCP 加密和发送数据(每条消息从几百字节到几百兆字节)以 block 从 Java 到 C++ 程序,并且需要发送的大小提前发送数据,以便收件人知道何时停止读取当前消息并处理它,然后等待
我不太知道如何问这个问题,因此我将其作为示例: 想象在一个应用程序中您有一个Country对象。此对象有两个属性:Name和'Bordering Countries'集合。稍后可能会添加更多属性,但这
我们正在尝试使用 IoT 中心、流分析和表存储来处理仪表板上的事件驱动图标(开/关/事件)。我无法让实际过程在 6 秒内完成。流分析的水印恒定为 5 秒。该网站声称即时处理。 https://azur
我正在尝试获取一个 JTabbedPane,其中所有选项卡(实际选项卡,而不是组件)具有相同的宽度(最宽标签所需的最小宽度或恒定宽度)。 我试图覆盖 BasicTabbedPaneUI.getTabB
你好安卓开发者, 我正在使用 OpenGLES 1.0 在 Eclipse 中为 Android 开发一个简单的游戏。我正在使用 Samsung Galaxy S2 Android(2.3) 作为开发
我正在尝试使用 ColorMatrix 为整个图像设置一个恒定的色调值。我的目标是使整个图像看起来颜色相同,而不会失去任何区域的亮度。我找到了一种使用 ColorMatrix 来移动图像的色调值的方法
我最近将我的 Postgres 数据库从 Windows 迁移到 CentOS 6.7。在 Windows 上,数据库从不使用太多 CPU,但在 Linux 上,我看到它使用恒定的 ~30% CPU(
你好,我正在用 SDL2 开发一款很棒的游戏,我添加了一个 FPS 调节器以使其在每台机器上都能流畅运行,但后来我创建了一个示例程序来输出 fps(不是调节,只是输出以查看电流的功率机器运行 ) 我在
我在 IntelliJ IDEA 13.0 中开发了一个应用程序,但是当我在我的设备上运行该应用程序时,它会不断等待调试器(如果我在 Debug模式下运行,调试器连接时没问题)但是如果远离计算机,我无
我想在 stat_密度2 图中绘制多个组,其中 alpha 值与每组中的观察计数相关。然而,由 stat_密度2d 形成的水平似乎已标准化为每组中的观察数量。例如, temp <- rbind(mov
我是一名优秀的程序员,十分优秀!