我有一个PHP函数加密文本如下:
function encrypt($text)
{
$Key = "MyKey";
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $Key, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
Run Code Online (Sandbox Code Playgroud)
如何在Python中解密这些值?
我想知道最简单和最快的PHP代码行来检查mcrypt扩展是否可用/已安装.
有一个函数可以加密字符串,首先需要检查mcrypt是否可用.如果没有,它将执行系统上可用的替代加密解决方案.
谢谢!
嗨伙计们.今天我正在测试php mcrypt算法.
我运行一个测试来检查不同的mcrypt algos的速度.
经测试的算法: Cast-128,Gost,Rijndael-128,Twofish,Cast-256,Loki97,Rijndael-192,Saferplus,Blowfish-compat,Des,Rijndael-256,Serpent,Xtea,Blowfish,Rc2,Tripledes.
测试以ECB模式运行(您也可以使用:CBC,CFB,CTR,ECB,NCFB,NOFB,OFB).
我加密了一个简单的字符串:"这是一个测试".以下结果是1000次迭代(结果以秒为单位).
BLOWFISH 0.5217170715332
BLOWFISH COMPAT 0.46304702758789
CAST 128 0.19502091407776
CAST 256 0.28649806976318
DES 0.45267295837402
GOST 0.19383502006531
LOKI97 0.27537798881531
RC2 0.44201898574829
RIJNDAEL 128 0.2560601234436
RIJNDAEL 192 0.33414602279663
RIJNDAEL 256 0.42553782463074
SAFERPLUS 0.32848501205444
SERPENT 0.391037940979
TRIPLEDES 0.65123796463013
TWOFISH 0.27349305152893
XTEA 0.37829685211182
当然,当我们谈论安全性时,处理时间并不是最重要的.我只是想分享我的结果.
你使用什么mcrypt算法和模式,为什么? 我知道这取决于情况,安全级别等,但请举一些例子.
我正在维护的PHP应用程序使用带有Ecry_MODE加密的Rijndael_256和mcrypt.有趣的是,密钥不是256位长,而是只有160.根据mcrypt_encrypt文档,密钥用\ 0填充以获得所需的大小,如果它太小.
用于加密数据的密钥.如果它小于所需的密钥大小,则用'\ 0'填充.最好不要将ASCII字符串用于键.
这似乎发生在mcrypt.c中第1186行的开头附近,并在第1213行修改了密钥.
因此,假设我们已经得到$key = 'abcdefghijkm';了太短的内容,但PHP的mcrypt实现确保在使用RIJNDAEL_256时它扩展到32个字符(或256位).最终的关键是什么样的?
我问这个是因为正在构建另一个使用相同加密数据的应用程序,但是使用另一种语言.Perl准确而且我正在使用Crypto::Rijndael.对于给定的示例密钥,Crypto::Rijndael为了能够再次解密数据,我必须提供哪些准确的密钥(或其他任何内容)?
更新
使用Perl,我可以生成一个键为0的填充pack('a32', 'my secret key');(或Z32),length()将报告32并且Crypt::Rijndael模块接受密钥.看看PHP的mcrypt的来源,这应该是生成的密钥(\ 0填充),但它根本不会接受它.
从理论上讲,PHP pack('a32', 'my secret key');应该会产生PHP的mcrypt生成的相同\ 0填充键,但事实并非如此.
我非常接近只是用一把新密钥加密所有东西.这花费了太多时间.
很长一段时间以来,我一直在尝试破解ASP .ASPXAUTH cookie并使用PHP解密它.我的理由是巨大的,我需要这样做,没有其他选择.到目前为止,在PHP中我成功地设法从这个cookie中读取数据,但是在加密时我似乎无法做到这一点.无论如何,这里......
首先,您需要更改服务器Web.config文件(保护需要设置为Validation):
<authentication mode="None">
<forms name=".ASPXAUTH" protection="Validation" cookieless="UseCookies" timeout="10080" enableCrossAppRedirects="true"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
然后在同一个域的PHP脚本中,您可以执行以下操作来读取数据,这是一个非常基本的示例,但是证明:
$authCookie = $_COOKIE['_ASPXAUTH'];
echo 'ASPXAUTH: '.$authCookie.'<br />'."\n";//This outputs your plaintext hex cookie
$packed = pack("H*",$authCookie);
$packed_exp = explode("\0",$packed);//This will separate your data using NULL
$random_bytes = array_shift($packed_exp);//This will shift off the random bytes
echo print_r($packed_exp,TRUE); //This will return your cookies data without the random bytes
Run Code Online (Sandbox Code Playgroud)
这会分解cookie,或者至少是未加密的数据:

既然我知道我可以获取数据,我从Web.config中删除了'protection ="validation"'字符串,我尝试使用PHP mcrypt解密它.我尝试了无数的方法,但这是一个很有希望的例子(失败了)......
define('ASP_DECRYPT_KEY','0BC95D748C57F6162519C165E0C5DEB69EA1145676F453AB93DA9645B067DFB8');//This is a decryption key found in my Machine.config file (please note this is forged for example) …Run Code Online (Sandbox Code Playgroud) 我搞乱了一个简单的授权方案.我认为没有SSL或其他HTTP身份验证的最简单的方法是共享密钥加密.根据PHP手册中的一个简单示例,我想出了以下内容:
$text = "boggles the invisible monkey will rule the world";
$key = "This is a very secret key";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_ECB, $iv);
$iv = base64_encode($iv);
$enc = base64_encode($enc);
echo '<a href="temp2.php?iv='.$iv.'&text='.$enc.'">link</a><br />';
Run Code Online (Sandbox Code Playgroud)
收到此请求的页面(temp2.php)如下所示:
$key = "This is a very secret key";
$iv = base64_decode($_GET["iv"]);
$enc = base64_decode($_GET["text"]);
$crypttext = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
Run Code Online (Sandbox Code Playgroud)
这非常接近,但它没有正确解码 - 它回应
boggles the invisible monkey will rule t—;eôügJë
我不确定挂断是什么,我尝试了urlencode/urldecode和htmlentities,认为可能是一个字符在请求中被破坏了,但没有区别.
还有什么我想念的吗?也许填充? …
我的密码课有问题.有时它非常快.但有时它很慢.我使用的代码如下
class Cipher {
private $securekey, $iv;
function __construct() {
$this->securekey = hash('sha256','51(^8k"12cJ[6&cvo3H/!2s02Uh46vuT4l7sc7a@cZ27Q',TRUE);
$this->iv = mcrypt_create_iv(32);
}
function encrypt($input) {
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_ECB));
}
function decrypt($input) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->securekey, base64_decode($input), MCRYPT_MODE_ECB));
}
function storeIV() {
return $this->iv;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议为什么这有时可能会很慢,以及我如何解决这个问题?
有什么区别MCRYPT_RIJNDAEL_128,MCRYPT_RIJNDAEL_256,MCRYPT_BLOWFISH,等哪一个是最适合的网络数据传输?
我已成功安装Laravel,但运行后php artisan serve,并要localhost:8000我得到这个错误:
使用未定义的常量MCRYPT_RIJNDAEL_128 - 假设为'MCRYPT_RIJNDAEL_128'
我已经检查phpinfo()过localhost:8888,它说mcrypt已正确安装.然而,我唯一能想到的是,我的道路可能是错的?
在我的.bash_profile身上
PATH=/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
每次我尝试运行Laravel命令时,我都必须在终端中输入:
export PATH="~/.composer/vendor/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
我在Mac上运行.有没有一种简单的方法可以设置我,bash_profile以便我可以在localhost地址之间不断更改并且仍然可以使用所有正确的PHP函数?
如何在Windows上的xampp中安装mcrypt?
我的PHP版本7.0.5和xampp包没有mcrypt 扩展,所以如何在xampp上安装mcrypt?