Php 双向加密图像文件名

Php 双向加密图像文件名,php,encryption,mcrypt,php-openssl,Php,Encryption,Mcrypt,Php Openssl,我想用加密字符串更改图像文件名 我还需要: 使用相同密码对原始字符串进行多次加密将返回相同的字符串 应解密加密字符串(双向加密) 我可以使用什么php方法? 我看到mcrypt多年来一直没有更新,每次加密时openssl_crypt都会返回不同的加密字符串(即使密码相同) 谢谢您应该使用分组密码 我建议使用Zend\Crypt\BlockCipher或\na钠\crypto\u secretbox 两者都易于正确使用,并具有清晰的文档 而openssl_crypt返回具有相同数据的不同字符串

我想用加密字符串更改图像文件名

我还需要:

  • 使用相同密码对原始字符串进行多次加密将返回相同的字符串
  • 应解密加密字符串(双向加密)
我可以使用什么php方法? 我看到mcrypt多年来一直没有更新,每次加密时openssl_crypt都会返回不同的加密字符串(即使密码相同)


谢谢

您应该使用分组密码

我建议使用Zend\Crypt\BlockCipher或\na钠\crypto\u secretbox

两者都易于正确使用,并具有清晰的文档


而openssl_crypt返回具有相同数据的不同字符串对于安全性是必要的。上述两种方法的作用相同

openssl\u encrypt&co应该可以。例如:

<?php
$data='foo.jpg';
$method='AES-192-CBC';
$password='ogiughjklpdeorivjrhfnd';
$iv=base64_encode(random_bytes(10));
$encrypted=array();
for($i=0;$i<10;++$i){
    $encrypted[]=openssl_encrypt($data,$method,$password,0,$iv );
}
$decrypted=openssl_decrypt ($encrypted[0] ,$method ,$password,0,$iv);

var_dump($data,$encrypted[0],$decrypted,$data===$decrypted,$encrypted[2]===$encrypted[7],$encrypted);

@Sammitch为了根据传递给生成图像的方法的变量参数(如高度、宽度等)创建唯一的文件名,您可以调用类似“myimage_200_400_Stretch.jpg”的文件。单向非身份验证哈希(如sha256)也经常用于缓存文件,大多数系统不需要双向nor身份验证。您应该返回一步,重新评估您试图解决的问题,因为该解决方案很荒谬。@Sammitch您可以自由提出解决方案谢谢@Erik,我会尝试一下,你的3个建议都不符合正确使用IVs的要求。面对现实,这一次你必须重复使用IV。从技术上讲,你提供了一个解决方案,但重复使用IV会破坏大多数系统的安全性。@ErikvanVelzen是的,但我认为正确使用唯一的IVs从根本上不符合这样的要求,即对完全相同的数据进行两次加密应产生完全相同的输出
——这正是IV应该防止的——为什么要使用随机字节、IVs的组成部分以及base64?为什么要使用AES-192?你怎么会对IVs有这样一个根本性的误解?@Sammitch base64对IV进行编码,因为二进制数据(特别是空字节)在调试时会导致PHP出现问题(例如,PHP的错误记录和异常::_构造的$message不是二进制安全的,如果抛出的异常在调用堆栈的参数转储中包含二进制$iv,则错误日志将在第一个空字节处停止),这可能与openssl_encrypt默认返回base64'ed数据的原因相同。我使用AES没有特殊原因,它只是一种非常流行的算法。PS,base64编码IV是一种非常常见的做法。请参阅Linux/BSD/crypt/password_散列