标签: initialization-vector

加密初始化向量

使用aes_cfb_encryptaes_cfb_decrypt函数,我有以下问题.

  1. 什么是加密中的unsigned char*iv(初始化向量).
  2. 是否需要保留*iv进行解密.
  3. 每次我加密一个数据块*iv被修改,我有什么用这个修改*iv.
  4. 我正在加密大约100mb的大文件,并且第一次传递随机*iv,我是否必须在循环的其余部分使用相同的*iv,或者我必须使用上次调用时更新的*iv加密块.

  5. 最后,我正在处理结构化文件,所以我必须使用Sizeof(struct)作为缓冲区的长度,或者必须使用sizeof(struct)*8作为加密或解密的缓冲区长度.请指导..

AES_RETURN aes_cfb_encrypt(const unsigned char *ibuf, unsigned char *obuf, int len, unsigned char *iv, aes_encrypt_ctx cx[1]);

AES_RETURN aes_cfb_decrypt(const unsigned char *ibuf, unsigned char *obuf, int len, unsigned char *iv, aes_encrypt_ctx cx[1]);
Run Code Online (Sandbox Code Playgroud)

aes_cfb_encrypt

c c++ encryption pascal initialization-vector

4
推荐指数
1
解决办法
1811
查看次数

为什么随机IV适用于AES-CBC而不适用于AES-GCM

我一直在使用AES-CBC进行加密,每次加密纯文本时我都会使用随机IV.据我所知,这是推荐的方法.

我一直在研究AES-GCM/AES-CTR,主要用于AEAD.我还没有用这个来实现任何东西,但从我读过的所有内容来看,基本上nonce只是一个短路的IV,并且有一个内部计数器用于每个加密调用.开发人员/需要确保在32位计数器循环返回之前更改随机数,否则相同的随机数(IV)可能与相同的密钥一起使用,该密钥可以加密相同的纯文本并泄漏加密密钥.

我真正不明白的是为什么AES-CBC可以随机使用IV,但我读过的一些内容表明AES-GCM的随机nonce(IV)是一个坏主意.我唯一能想到的是AES-CBC的IV比AES-GCM的nonce更长,因此AES-GCM的重复nonce的可能性更大.

我需要加密几个字节到10到20 GB之间的数据.我知道AES-GCM对计数周期之前可以加密的数据大小(~60GB)有限制.我可以解决这个限制,因为我的数据低于此限制.

有人可以解释为什么不为AES-GCM建议随机现时的原因吗?

encryption cryptography initialization-vector aes-gcm

4
推荐指数
3
解决办法
6695
查看次数

使用具有单块加密的常量IV

我有很多小秘密,我想在数据库中加密存储.数据库客户端将具有密钥,并且数据库服务器将不处理加密和解密.我的所有秘密都是16字节或更少,这意味着使用AES时只有一个块.我使用常量IV(和密钥)使加密确定性,我做确定性加密的原因是能够使用密文轻松查询数据库,并确保相同的秘密不会存储两次(通过使列UNIQUE ).只要密钥是秘密的,我可以看到这样做应该没有问题.但我想确定:我是对还是错?如果我错了,可以做些什么攻击?

BTW:哈希在这里很无用,因为可能的明文数量相对较少.使用哈希,获得原始明文是微不足道的.

cryptography aes initialization-vector

3
推荐指数
1
解决办法
1362
查看次数

使用 Rfc2898DeriveBytes 类获取 Key 和 IV

我刚刚开始熟悉加密和 .NET 框架。在查看了许多示例之后,我看到了一个重复的模式,在使用 .NET Class 时会让人感到困惑Rfc2898DeriveBytes。使用此类获取加密密钥和初始化向量时,似乎使用了相同的方法。

以下是MSDN 博客中的一些代码,用于演示获取密钥和初始化向量。

byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes("P@$$w0rd", salt, 1000);

// generate an RC2 key
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(8);
Run Code Online (Sandbox Code Playgroud)

我在其他地方也看到过这个。我想我会认为它会是这样的......

// generate an RC2 key
byte[] key = pwdGen.GetKey();
byte[] iv = pwdGen.GetInitializationVector();
Run Code Online (Sandbox Code Playgroud)

我一定在这里遗漏了一些东西。如果密钥和初始化向量 (IV) 只是随机数,那么在使用正确的密码和盐时如何再次获得它们?

.net encryption encryption-symmetric initialization-vector

3
推荐指数
1
解决办法
2926
查看次数

与IV一起使用时,带有BouncyCastle的AES-GCM会在"GCM中的mac检查失败"

我对开发加密的东西比较陌生.现在我正在尝试使用带有AES-GCM的BouncyCastle编写一个加密和解密字符串的类.我读到了实施加密时必须考虑的事项.其中之一是你应该总是使用随机IV.问题是,每当我尝试使用IV初始化我的密码时,它都不会正确解密我的文本.
它只会抛出以下异常:

javax.crypto.AEADBadTagException: mac check in GCM failed
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$AEADGenericBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at BouncyCastleEX.decrypt(BouncyCastleEX.java:78)
at BouncyCastleEX.main(BouncyCastleEX.java:43)
Run Code Online (Sandbox Code Playgroud)

我正在使用以下方法来加密和解密我的数据.

private static final String fallbackSalt = "ajefa6tc73t6raiw7tr63wi3r7citrawcirtcdg78o2vawri7t";
private static final int iterations = 2000;
private static final int keyLength = 256;
private static final SecureRandom random = new SecureRandom();

public byte[] encrypt(String plaintext, String passphrase, String salt)
        throws Exception {
    SecretKey key = generateKey(passphrase, salt);
    Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC"); …
Run Code Online (Sandbox Code Playgroud)

java encryption bouncycastle initialization-vector aes-gcm

3
推荐指数
2
解决办法
1万
查看次数

Handling transfer of iv (initialization vectors)

I have a site A and site B where site A needs to send sensitive encrypted data to site B for site B to decrypt. I know that its best to encrypt using a randomized cryptographic initialization vector (iv) which is unique to each secret string, but my question is:

鉴于传输是使用 https 进行的,将 iv 与密文一起发送是否安全?是否有转移 iv 的最佳做法?

我的理解是 iv 是密文开头的一部分,所以我倾向于相信 iv 没有真正的安全威胁。

谢谢!

encryption cryptography initialization-vector

3
推荐指数
1
解决办法
676
查看次数

Node.js加密:无效的IV长度

以下node.js代码尝试在ECB模式下使用AES 128创建密码,初始化向量(IV)填充0字节.<< rant >>我知道应该不惜一切代价避免使用ECB模式进行加密,但它仍然需要支持在第二次世界大战之前构建的遗留系统(当首次发现加密ECB模式的危险时). <</rant >>.

let keyBuffer = Buffer.from("DoNotUseUTF8Keys",'utf8');
let ivBuffer = Buffer.alloc(16); // 16 bytes set to 0
//try {
try {
  let cipher = createCipheriv("AES-128-ECB", keyBuffer, ivBuffer);
} catch (e)
{
  console.log(e.message);
}
Run Code Online (Sandbox Code Playgroud)

当调用createCipheriv(或createDeciperiv)时,node.js代码抛出"无效的IV长度".

对于128位(16字节)密码,AES应具有16字节的初始化向量(IV).

这是一个错误还是我做错了什么?

cryptography aes node.js initialization-vector

3
推荐指数
1
解决办法
2879
查看次数

独特的初始化向量有什么好处?

我使用带有Rijndael类的AES加密来加密密码,然后将其存储在配置文件中.

我知道什么是初始化矢量.我在SO上读过线程(例如我应该使用初始化向量(IV)和我的加密吗?)和维基百科上的文章.

但是,有一点我不明白:因为您需要在解密过程中使用与加密期间使用的相同的IV,您将被迫使用加密文本存储IV.对每种加密使用独特的IV有什么好处?如果攻击者获得加密文本,他也将获得IV.

c# encryption aes initialization-vector

2
推荐指数
1
解决办法
231
查看次数

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

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

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

有人知道AES是否可以加密.Net中的某些东西而不指定IV(空)?

.net cryptography rijndael asp-classic initialization-vector

2
推荐指数
1
解决办法
3486
查看次数

在数据库中存储前缀为CipherText的AES IV是否安全?

我想将AES加密数据存储在DB字段中.

在密文之前存储AES IV(每行唯一)是否安全?例如

IV_CipherText

两者都将在Base64中编码.

使用的密钥不会存储在数据库中.

database cryptography initialization-vector

2
推荐指数
1
解决办法
464
查看次数