问题标签 [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 投票
3 回答
2934 浏览

php - 如果对每个加密数据集使用不同的密钥,是否需要初始化向量?

我正在学习加密并在 PHP 中使用 openssl_encrypt。我分别使用 2 个函数进行加密和解密。我只是传递要加密/解密的数据,以及属于用户的唯一 ID。该函数返回加密/解密的数据。

调用该函数时,我收到一条 PHP 警告,提示“openssl_encrypt():使用空的初始化向量 (iv) 可能不安全且不推荐”。

我已经阅读了一些关于 IV 的内容,并试图了解在这种情况下是否需要 IV,如果我为每个加密数据集使用唯一密钥:

我的加密功能是这样设置的:

解密函数几乎相同,只是它改为解密并返回数据。

请注意,我将全局加密密钥与用户的唯一 ID 组合在一起以生成组合密钥。这确保了每个用户的密钥都是唯一的。因此,这也应该确保加密数据对于不同的用户也是唯一的,即使未加密的值是相同的,对吗?如果是这样,那么在这种情况下是否需要静脉注射?仍然使用 IV 是否有优势或不使用 IV 的劣势?

0 投票
1 回答
110 浏览

public-key-encryption - java - 如何在java中解密具有已知密钥和IV的字符串?

我有一个在 c#.net 中加密的字符串,我必须使用客户端提供的密钥和 IV 在 java 中对其进行解密。使用的算法是AES。

我尝试了几件事。钥匙看起来像

当我将它与密码类一起使用时,算法AES/CBC/PKCS5Padding 将上述密钥传递给Secretkeyspec类,它说无效密钥长度为 44 个字节

我无法弄清钥匙有什么问题。尝试了几天所有建议的解决方案,但没有任何效果。有人可以帮忙吗?谢谢你。

0 投票
1 回答
1724 浏览

c++ - 游戏服务器客户端/服务器中的 AES 加密

我运行一个游戏服务器,我有一个主服务器来处理从玩家(客户端)发送的所有数据包。

我想通过 AES 加密我的数据包,以便每个数据包都应该是唯一的(我认为我在这里需要 IV)并且该服务器应该只接受每个加密数据包一次,这样如果有人试图嗅探一个数据包,他就无法再次发送它。

我该怎么做呢?

PS i 代码服务器和 C++ 中的客户端

0 投票
0 回答
34 浏览

php - 是否可以使用 PHP 的内置函数而不使用 mcrypt 来制作密码强度/安全的盐?

我需要生成一个盐(传递给 crypt),但服务器没有 mcrypt(而且我没有能力把它放在那里)。有没有办法可以使用openssl_random_pseudo_bytes或其他内置的 PHP 函数来做到这一点?

重要的是它具有安全随机性。

我的 mcrypt 是:

如果没有 mcrypt,我将如何做到这一点?

0 投票
1 回答
1087 浏览

c# - C# AES 加密 - 流模式自动添加 IV

根据GregS对This Answer的评论,IV 应该添加到 AES 加密数据之前(假设我没看错):

把它放在密码之前。这样你就可以在流模式下解密。

在我看来,GregS 是在暗示有一种流模式,可以自动预先/解析加密中使用的 IV。

这是真的?

我目前正在手动将我的 IV 添加到加密数据中,并在解密之前手动将密码拆分为 IV 和数据。有没有一种方法可以自动执行此操作?


以供参考:

这就是我现在正在做的事情:

Encrypt方法:

Decrypt方法:

0 投票
1 回答
85 浏览

initialization-vector - 我的 Rijndael 有什么问题给了我这个?

我正在使用 .net System.Security 中的 Rijndael 类来加密我的 RSA 密钥

这就是我的设置方式:

这就是我得到的:

代替

是IV吗?
如果是 IV,考虑到我已将模式设置为 CBC,它不应该混淆整个文本吗?

0 投票
1 回答
30691 浏览

java - 在 Java 中为 AES 生成随机 IV

我正在为 android 中的 PBE 实现和 AES 加密引擎,我找到了两种方法来实现 IV 的创建,我想知道哪种方法更好更安全IvParameterSpec

方法#1:

方法#2:

0 投票
1 回答
1128 浏览

java - 从Java中解密的Base64字符串中删除字符

关于这个问题;Java (Android) 解密带有 IV 的 msg

我的消息可以很好地解密,但带有不需要的 IV 字节数据。
我尝试删除附加的 IV,但它并没有删除所有字符,并且某些字符总是留在后面。我不确定我应该如何计算编码 IV 的长度以删除不需要的字符。

0 投票
1 回答
1536 浏览

java - AES-256:Ruby 和 Java 实现之间的 IV 向量误解

我已经“继承”了一个 Ruby on Rails 应用程序,我必须将这个应用程序从 Ruby 翻译成 Java,最重要的是,我与创建者没有联系。

我的问题是 AES-256 身份验证中的 IV 向量。Ruby 应用程序使用 AESCrypt gem 来加密和解密用户的密码。它工作正常,我已经在数据库中有数千个用户。

问题是当我尝试在 Java 中做同样的事情时(我已经更新了 JCE 以允许 256 位密钥长度)。密钥和 IV 在 ruby​​ 源代码中写为二进制字符串(见下文),当我尝试在 Java 中使用它时,我得到一个异常,说 IV 长度必须为 16 个字节长(我知道它必须是16 字节长,但 Ruby 中的二进制字符串有 32 个字符)。

Ruby代码(工作正常):

这是我的Java代码(它应该做同样的事情,似乎适用于16个字符/字节IV):

我得到了这个例外(显然):

我想我的问题是我在字节 [] 中转换 IV java 字符串的方式。我认为 ruby​​ 中的 openSSL 代码正在将 IV 的 32 个字节解包(或在内部做一些事情)到 16 个字节。我已经尝试了很多东西,但我快要疯了。

任何人都有同样的问题或找出我的问题在哪里?我已经发布了加密代码,但我在解密时遇到了同样的问题。

在此先感谢,我将非常感谢每一个答案。:)

0 投票
3 回答
446 浏览

c# - 一个新的随机初始化向量在加密过程中总是产生相同的密文

我在这里阅读了一些关于正确使用初始化向量的线程,并且正在重构一些现有代码以使用每个项目的随机 IV。

我有一个方法,它需要一个数据块和一个密钥,并且应该使用提供的密钥和一个随机 IV 来加密 blob。

目的是防止为相同的数据输入和密钥生成相同的密码。不幸的是,尽管控制台输出显示每次生成不同的 IV,但多次调用使用相同数据和密钥的方法会产生相同的密码。

知道这是哪里出错了吗?