问题标签 [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.

0 投票
1 回答
705 浏览

c# - 您可以将 aesIV 附加到由 AES 密码算法加密的数据吗?

按照使用 AES 算法的标准说明,我无法在 C# 中使用 AES 正确加密/解密某些文本。虽然我发现如果我将名为 aesIV 的数据与加密数据分开附加,我可以。据我了解,aesIV 已经嵌入到加密数据中。所以我认为它不会产生安全问题。请让我问我是否可以做到。

先感谢您。

0 投票
3 回答
4319 浏览

.net - 如何在没有 IV 的情况下在 .NET 中进行 AES 加密

我们的经典 ASP 应用程序有一个遗留部分,它使用一些代码,这些代码应该使用 Rijndael (AES) 加密/解密字符串。此代码是在Internet上找到的(Rijndael AES Block Cipher (VB Version))。我已经在 SO 上找到了一个问题,它引用了这个确切的库,并且问的问题与我几乎相同,但我怀疑至少有一件事情出错了(除了在字节数组的开头添加要加密的数据长度之外) )。vbScript 实现看起来根本不想向要加密的数据添加 IV。因此,我无法将相同的加密与 RijndaelManaged 匹配,因为它:

  1. 每次自动生成不同的 IV
  2. 绝对需要静脉注射

有人知道是否可以在不指定 IV(空)的情况下对 .Net 中的某些内容进行 AES 加密?

0 投票
0 回答
517 浏览

android - AES 中的初始化向量长度

我在 AES/CBC/PKCS5Padding 中使用了 AES,并在 Android 中使用了以下加密和解密代码部分:

其中 IV1 和 IV2 是随机生成的 16 字节初始化向量。我这样做是为了检查原始文本和解密文本是否会在加密和解密方中使用不同的 IV 不同。这导致解密文本的字节在前 16 个字节之后与原始文本的字节相同。例如,如果原始文本是:

解密后的文字是:

其中 * 表示错误解密的字节,因为它应该是 IV1 和 IV2 不同。

我的问题是:如何使用带有初始化向量的 AES 加密和解密长度大于 16 字节的文本?

0 投票
4 回答
1452 浏览

java - 生成初始化向量真的需要 SecureRandom 还是足够随机?

为了使流密码能够防止重复的密钥攻击,IV 不应该重复自己。但是 SecureRandom 在这方面是否比简单的非安全 Random 有好处(或者它只是用于生成不可预测的序列)?

假设我在 AES CBC 模式下使用固定大小的消息,并且我为每个 IV 生成一个新的 Random(使用当前的纳米时间作为种子),与 SecureRandom 相比,这会增加重复 IV 的概率吗?

0 投票
14 回答
529109 浏览

python - 使用 PyCrypto AES 256 加密和解密

我正在尝试使用 PyCrypto 构建两个函数,它们接受两个参数:消息和密钥,然后加密/解密消息。

我在网上找到了几个链接来帮助我,但每个链接都有缺陷:

codekoala 上的这个使用 os.urandom,PyCrypto 不鼓励这样做。

此外,我给函数的密钥不能保证具有预期的确切长度。我能做些什么来做到这一点?

另外,有几种模式,推荐哪一种?我不知道用什么:/

最后,IV到底是什么?我可以为加密和解密提供不同的 IV,还是会返回不同的结果?

编辑:删除了代码部分,因为它不安全。

0 投票
1 回答
1059 浏览

c# - 正确的 C# Rijndael IV 使用/存储

下午,

所以我对所有这些加密方法和用法都很陌生。我刚刚开始构建加密实现。现在我的加密和解密方法似乎工作正常。直到我读到我在 RijndaelManaged 类中使用硬编码 IV 失败了。

我到处都在读到最好(也更安全)让每个加密文件的 IV 在“加密时间”唯一生成并保存在文件的前面/开头,因为其余的加密字节在此之后直接保存。(如果我理解正确的话)

我一直很难弄清楚我的问题,因为每次我加密文件时,我都会将 IV 写入文件的前 16 个字节(正如课程、MSDN、谷歌和这个论坛上的一些人所建议的那样)然后直接将其余的加密字节写入文件流。(IV 以明文形式保存……或者未加密的字节 < 这也可以吗?)

我的问题是,当我尝试使用完全相同的密钥解密文件时,它失败了:在我开始读取文件的块进行解密(缓冲)之前,我尝试读取文件的前 16 字节以获取明文 IV 并在 RijndaelManaged 类中使用它实例。

这似乎失败了。我检查了一下,我想我可能在某个地方犯了一些小学生错误:因为一旦我想解密它,我似乎无法从加密文件中读取相同的 16 个字节。

这是我用来在加密之前进行文件处理的代码(不是它自己的加密)


这是我在解密之前处理文件的代码(不是解密本身)

我想这就是全部?此外,“控制台”和其他无用的调用只是为了帮助我检查和找出问题所在。我正在使用 Visual Studios 2010,并尝试实现 RijndaelManaged 类。

加密/解密方法通过我的密钥和 IV 传递给 FileChunks(字节数组),这些返回一个字节数组(加密),它被保存到流中。

我希望我的问题很清楚?如果不是我会尝试更好地解释,我已经到处阅读以寻求有关此特定问题的帮助,但此处发布的大多数其他问题超出了我的范围。

我真的很感激任何帮助,我确定我在某个地方犯了一个小丑错误..

Thank you!!

0 投票
3 回答
810 浏览

random - 初始化向量创建

我的程序连接到服务器,服务器的公钥是已知的。然后程序将 AES 密钥与初始化向量一起加密,并将其发送到服务器。服务器解密消息,从现在开始使用 AES 加密对话。

我的问题是关于如何生成 IV。如果我采取天真的方式并用当前时间播种一个伪随机生成器,攻击者可能会对 IV 做出一些非常好的猜测,这可诅咒不是我想要的。

由于硬件随机生成器不仅速度慢,而且并非随处可用,我想采用不同的方法。当客户端程序第一次启动时,我让用户随机移动一些鼠标,就像 TrueCrypt 一样。我现在保存由鼠标移动创建的那些“随机位”,当我需要生成器时,我会将它们用作种子。当然,每次我将随机位用作种子时,都必须更新它们。这是我的问题:我考虑将生成的前几个随机位保存为新的“随机位”。(所以他们习惯于在下次软件启动时初始化随机引擎。)现在我不确定这是否足够随机,或者伪随机生成器是否会在这里显示可猜测的模式。(我可能会使用 std::mt19937 http://en.cppreference。)

编辑:链接模式发生变化,所以我希望它适用于具有“最高”要求的模式。如果我没记错的话应该是CBC。

请注意:我正在编写的软件纯粹是实验性的。

0 投票
2 回答
9747 浏览

java - 为什么我的 AES Cipher 在 DECRYPT_MODE 的 init 上抛出 InvalidKeyException

为什么这个初始化会成功:

虽然这失败了:

在线程“main”java.security.InvalidKeyException 中引发异常:缺少参数

secretKey 由 KeyGenerator 生成,secureRandom 由 SecureRandom.getInstance("SHA1PRNG") 与随机静态种子集生成。

谢谢

0 投票
3 回答
2207 浏览

encryption - BlowFish 加密/解密问题(JBoss 加密)

这是我在使用 BlowFish 加密/解密时遇到的问题。

以下代码用于测试 BlowFish 加密/解密

现在,如果我尝试加密字符串

u7mzqw2

我得到的价值为

-7ccb7ff0c2858a

如果我尝试解密

-7ccb7ff0c2858a

我得到如下错误:

完整代码在这里

如果我没记错的话,它与 7 个字符长度的原始值或非 /8=0 加密值无关,如下所示

java JBoss -e qwerty

-40e961f375c2eee6

java JBoss -d -40e961f375c2eee6

qwerty

我错过了什么??

0 投票
2 回答
19012 浏览

python - PyCrypto - 初始化向量如何工作?

我试图了解 PyCrypto 如何在项目中使用,但我并不完全理解初始化向量 (IV) 的重要性。我发现在解码字符串时我可以使用错误的 IV,除了前 16 个字节(块大小)之外,我似乎仍然可以得到消息。只是使用错误或不理解某些东西吗?

这是一个示例代码来演示:

我正在使用 Python 3.3。

输出会因执行而异,但我得到如下信息:b"1^,Kp}Vl\x85\x8426M\xd2b\x1aer secret message. Please don't tell anyone about it or I'll have to shoot you."