ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

没有IV的PHP Mcrypt加密

2019-10-28 10:30:58  阅读:199  来源: 互联网

标签:mcrypt performance initialization-vector php


我需要使用加密机制.我选择了mcrypt,因为它可用且用于其示例.但是我看到生成时间太多了.当我在给定的示例中使用IV时,删除它花了很多时间,但它立即生成了加密值.

// Code example using IV
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_RANDOM);

$encryptedString = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryptionKey, utf8_encode($origString), MCRYPT_MODE_ECB, $iv);
return base64_encode($encryptedString);

// Code example without IV    
$encryptedString = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryptionKey, utf8_encode($origString), MCRYPT_MODE_ECB);
return base64_encode($encryptedString); 

因此,如果不使用IV加密是否存在任何重大的安全问题?

解决方法:

DEV_RANDOM从/ dev / random或等效项生成随机整数,该整数侦听不可预测的数据(例如鼠标移动,键盘击打等)以生成安全数据.如果没有击键等,它只会等到有足够的数据…这就是为什么它很慢.

DEV_URANDOM使用/ dev / urandom或同等功能,虽然它也可能使用上面的数据,但除此之外,它还结合了伪随机数生成器为您实时提供随机数据(这是可预测的,但这通常无关紧要) )

它们用于确定IV的构造方式.

现在到IV.

IV用于导出加密函数使用的随机函数的初始种子.

您使用ECB.首先要注意的是,欧洲央行没有使用IV,因此您编写的内容没有任何意义.如果使用ECB,则可以完全跳过创建IV,并且可以解密数据而不会出现问题.但是另一件事是您不应该使用ECB. ECB对您的数据进行编码,以使每个具有相同数据的块看起来都一样.另一方面,CBC将每个块与前一个块的数据进行异或运算(为此,它需要IV).为了说明两者之间的区别,请看以下内容:

从左到右:原始图像,以ECB模式编码的图像和以CBC模式编码的图像.

如果要使用CBC,还应该为分别加密的每个数据重新生成IV,否则与使用ECB一样糟糕.每次重新生成IV都会防止基于重复的攻击.

最后,如果使用CBC,则需要存储其IV,以便以后可以解密文本.如果不这样做,您将得到垃圾.幸运的是,大多数加密算法的设计都使IV可以公开,因此您不必担心将IV保密.

TL; DR:将CBC与分别为每个数据重新生成的公共IV一起使用.

(此外…如果您不关心解密,则可能会对加密哈希表感兴趣.)

标签:mcrypt,performance,initialization-vector,php
来源: https://codeday.me/bug/20191028/1951605.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有