问题标签 [initialization-vector]
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.
c - rand 应该用于 IV 吗?
AES 的 CBC 模式指定要使每条消息唯一,应使用 IV。IV应该是随机的并且只使用一次,否则它可能允许人们解密使用相同密钥的其他密文。
C中的rand()
函数是否适合生成此 IV?它通常以当前时间播种的事实是否使其容易受到某种攻击?
java - Java AES CTR IV 和计数器
我试图通过自己在这里寻找并在其他地方搜索很长一段时间来找到答案,但我仍然有一些问题。
假设这个 Java 代码:
我的问题是:
关于 CTR 模式的计数器更新,上述代码是否被认为可以?具体来说,我自己不会更新计数器。我应该改用下面的 while 循环吗?我尝试了这个,因为我查看了 cipher.getIV() 在循环中返回的内容,但它没有改变,并且 getIV() 的描述也没有详细说明:
我有更多与修改后的 while 循环方法相关的问题。以这种方式调用 cipher.init() 可以吗?我这样做是因为我还没有找到只更新 IV 的方法(实际上是计数器)。
这么大的块大小可以还是应该做得更小?在这种情况下,它应该有多大?
c++ - 使用密文 Crypto++ CBC AES 加密存储 IV
我正在尝试在 CBC 模式和 Crypto++ 库中使用 AES 加密(并在之后解密)文件
这是我已经做过的:
要加密文件,我以二进制模式打开它,并将内容转储到字符串:
然后,我使用之前生成的密钥和 iv 加密这个字符串:
现在,我想将加密的字符串写入文件,并与它一起存储 IV,因为 iv 不需要保密,最好是在密文的开头或结尾
问题来了:IV是一个字节数组,密文是一个字符串,我是否需要将两者中的一个转换为另一种类型,或者我可以这样做:
当我尝试解密此文件时,如何分别提取 iv 和密文?IV 长 16 个字节,但在这里我完全迷路了,我不知道该怎么做。
security - 使用秘密作为 IV
我有一个应用程序,其中敏感数据需要以每次运行从相同输入产生相同加密值的方式进行加密。主要数据类型是电子邮件地址。加密的值必须始终相同,因为它们与统计分析相匹配。生成数据的运行将在很长一段时间内定期发生。这使得为 AES 加密选择 IV 有点棘手。问题是:将秘密(给定密码的哈希值)也用作 IV 是否可以接受?加密模式或填充会导致这种不安全吗?我假设这不是一个好的做法,因为我以前从未见过它建议过,但因为它非常方便,我想我会问。
(请注意,哈希值已经是工具中的一个选项。现在也考虑加密,因为这些值是可逆的,这使得客户的报告分析更简单一些。)
c++ - C++11 extern 复杂容器和容器初始化
当我们想要一个导出变量(在 C 和 C++ 中)时,我们需要:
- 在 hpp 头文件中将变量声明为 extern(即 extern int x;)
- 在 cpp 文件中初始化变量(即:int x = 0)。
但是,我发现容器存在困难,并且收到诸如“变量被多次声明”之类的消息。
例如:
hpp 文件:
cpp文件:
main.cpp(或其他 cpp):
但是,正如我所提到的,这不是编译。
你能告诉我我做错了什么吗?
encryption - Is there any way to run aes-128-cbc encryption in openssl without iv?
I am trying to encrypt a text file with openssl
using aes-128-cbc
encryption and I was wondering if there was a way I could encrypt it only using the key and not the iv?
Everytime I try to run:
I get the error saying iv undefined
and the encrypted file it generates is empty and it is not even a binary file.
java - 密码学:为什么我的加密初始化向量只影响前 16 个字节?
我想尝试加密文件并利用以下堆栈溢出响应。然而,在测试初始化向量时,我发现它只影响了前 16 个字节。
当我将一个空的 iv 传递给解密密码(前 16 个字节除外)时,数据被意外解密。 [我假设图书馆没有坏,而且我做的事情不正确;但令人恐惧的是,其他人可能在同一条船上却没有意识到这一点。]
例子:
Q:为什么整个解密没有失败?推测:我想我可以通过一次迭代 16 个字节的数据并通过散列先前加密的 16 字节块来更新每轮的 iv 来进行加密。然而,这似乎是我希望图书馆做的繁忙工作。我本来希望提出实施指南的专家会提到它。但我只是在这里抓住稻草。据我所知,也许安全社区只担心第一个区块的黑客攻击。
注意:刚才我发现了一个 5.5 年前的堆栈溢出帖子,发现了同样的问题;不幸的是,它仍然没有回应。
code>amazon-web-services - How to get the Initialization Vector (IV) from the AWS Encryption CLI?
I'm encrypting a file using the AWS Encryption CLI using a command like so:
From the output of the command, I can clearly see that it's using an Initialization Vector (IV) of strength 12, which is great, but how do I actually view the IV? In order to pass the encrypted file to another service, like AWS Elastic Transcoder, where it'll do the decryption itself, I need to actually know what the IV was that was used for encrypting the file.
c# - 在哪里存储 Android 应用中解密所需的 IV?
我应该在哪里存储我的 Android 应用程序中 AES 解密所需的 IV(字节数组)?我尝试将其转换为 Base64 中的字符串并将其保存到共享首选项,但一直收到错误的填充异常。我试图改变填充,但没有奏效。
我还将 IV(字节数组)保存到了密钥库的提供程序,并且工作正常,但是在 Visual Studio for Mac 中进行调试时,每次运行应用程序时,提供程序的内容(在本例中为 IV)都会被删除。提供者仍然存在,但提供者中没有保存任何内容。Android 的文档说“每个提供程序……都在它安装的每个运行时中进行配置。” 一旦应用程序安装在实际设备上,这会是一个问题吗?
我在 Visual Studio for Mac 中用 c# 编码。
编辑
这是我使用 Base64 编码的代码:
字符串 ivString = Base64.EncodeToString(ivByteArray, Base64Flags.Default);
byte[] decodedIV = Base64.Decode(ivString, Base64Flags.Default);
当我打印出原始字节数组和解码后的字节数组时,它们完全相同,但我不断收到错误的填充异常
我正在使用 AES、CBC 和 EncryptionPaddingPkcs7