我似乎无法找到差异的来源.我在这个在线解密工具中发现了这种差异
http://www.tools4noobs.com/online_tools/decrypt/
我有一些加密的Blowfish数据,我试图通过Python的PyCrypto模块解密.然而,问题是数据似乎是用"blowfish-compat"加密的,因为这是通过在线工具解密它所需要的; 我不能通过PyCrypto的模块解密它,我收集它严格使用Blowfish解密(而不是Blowfish-compat,不管是什么).
有可能以某种方式通过Python解密blowfish-compat吗?我不知道两者之间的区别.
根据 stackoverflow 上的一些例子,我创建了一个页面来破解和解密来自html表单的文本.但不知何故,有时候这种情况有时不起作用,而且通常不会.
为什么会这样?htmlencode是否修改了发布过程中的键?我该如何解决这个问题?我应该使用base64吗?
<?php
$key_size = mcrypt_get_key_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CFB);
$encryption_key = openssl_random_pseudo_bytes($key_size, $strong);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); // 16 bytes output
if($_POST){
$iv = $_POST["iv"];
$encryption_key = $_POST["key"];
$string = $_POST["msg"];
if($_POST["do"]=="encrypt"){
echo "crypted";
$result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryption_key, $string, MCRYPT_MODE_CFB, $iv);
}else{
echo "de-crypted";
$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $encryption_key, $string, MCRYPT_MODE_CFB, $iv);
}
}
?>
<div class="main" id="main">
<form method="POST" action="">
<input type="text" value="<?php echo $iv; ?>" name="iv"/> <br/>
<input type="text" value="<?php echo $encryption_key; ?>" name="key"/><br/> …Run Code Online (Sandbox Code Playgroud) 尝试在node.js中重新创建以下php加密代码:
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($size, MCRYPT_RAND);
$msg = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, 'MY_KEY_LONG_STRING', 'PLAINTEXT', MCRYPT_MODE_ECB, $iv));
Run Code Online (Sandbox Code Playgroud)
尝试过这个:
var text = 'PLAINTEXT';
var len = text.length;
for (var i = 0; i < 16 - len % 16; i++) { // pad to multiple of block size
text += '\0';
}
var key = 'MY_KEY_LONG_STRING';
key = key.substr(0, 16); // trim to expected key size for aes128
var cipher = crypto.createCipher('aes-128-ecb', key);
cipher.setAutoPadding(false); // did our own padding, to match mcrypt_encrypt …Run Code Online (Sandbox Code Playgroud) 我有一些使用 PHP 的 mcrypt 函数加密的旧数据。该站点现在使用 PHP 7.1,这意味着我们遇到了弃用错误。我想迁移到使用 openssl 函数(这似乎是当前推荐的方法),但我不知道如何可靠地解密旧的加密数据。
有没有一种相当简单的方法来实现这一点?
在(不太遥远)过去,(在这里工作较长的人)做出的决定总是将数据库ID"加密"到其他东西,即时,只要外部通信需要它.
现在,我们已经从PHP 5.x转移到PHP 7.0用于我们的主应用程序,而我们遍布基础架构的微服务运行7.0或7.1.7.1服务器继续抛出mcrypt的弃用警告.没什么大不了的.但是随着PHP 7.2的到来,我们希望不断更新和升级.麦克莱普正在阻挠.
要在1400个数据库中保存60个表中的所有当前加密值,这是一项艰巨的任务.有没有办法利用OpenSSL,Blowfish和ECB,获得相同的编码和解码值,以使我们陷入虚假的安全感?所有这些都可以让我们远程规划数据库迁移.
基本上,当前加密的值是这样的:
item:13fb7533bf19399ff114468b194ebfaf
这是身份证123.它通过以下函数来获取此字符串:
$id = 123;
$type = 'item';
$serialized = serialize('' . $id); // To make sure always a string gets put in
$ivSize = mcrypt_create_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND);
$iv = mcrypt_create_iv($ivSize);
$passCrypt = mcrypt_encrypt(MCRYPT_BLOWFISH, $type, $serialized, MCRYPT_MODE_ECB, $iv);
$encoded = bin2hex($passCrypt); // `13fb7533bf19399ff114468b194ebfaf`
$encryptedId = $type . ':' . $encoded;
Run Code Online (Sandbox Code Playgroud)
这给出了最终结果item:13fb7533bf19399ff114468b194ebfaf.
现在,换句话说:
$encryptedId = 'item:13fb7533bf19399ff114468b194ebfaf';
$type = 'item';
$encryptedIdOnly = substr($encryptedId, strlen($type) + 1); // `13fb...`
$decoded = hex2bin($encryptedIdOnly); …Run Code Online (Sandbox Code Playgroud) 我试图使用Cbit模式中的Rijndael密码使用256位密钥加密PHP中的一些数据但由于某种原因我收到以下错误消息:
mcrypt_encrypt()模块初始化失败
我的代码:
$hashKey = hash('sha256',$key);
$iv = hash('sha256',$hashKey);
// ------Cipher-------------key-------------Data-------------Mode---------IV--
$encryptedQuestion = base64_encode(mcrypt_encrypt('MCRYPT_RIJNDAEL_256', $hashKey , $_POST['question'], MCRYPT_MODE_CBC, $iv));
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到这个错误吗?
我正在尝试使用Homebrew在Mountain Lion上的PHP 5.4.11中安装mcrypt支持,我遇到了无法解决的问题.
我已经在我的Mac上手动安装了PHP 5.4.11.先前已经使用Homebrew安装了mcrypt.
当我加载phpMyAdmin时,它会告诉我mcrypt没有启用.
所以,搜索谷歌,我意识到,不知何故,mcrypt没有被加载,因为当我加载我的phpinfo文件时没有引用它.
@DavidYell在回答另一个问题时,在OSX Mountain Lion上安装PHP的mcrypt扩展提示了以下修复
brew install mcrypt php53-mcrypt
以下是我发出命令的结果:
$ brew install mcrypt php54-mcrypt
Error: mcrypt-2.5.8 already installed
==> Installing php54-mcrypt dependency: autoconf
==> Downloading http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/autoconf/2.69
==> make install
/usr/local/Cellar/autoconf/2.69: 69 files, 2.0M, built in 29 seconds
==> Installing php54-mcrypt dependency: freetype
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/freetype-2.4.10.mountainlion.bottle.tar.gz
######################################################################## 100.0%
==> Pouring freetype-2.4.10.mountainlion.bottle.tar.gz
/usr/local/Cellar/freetype/2.4.10: 56 files, 2.5M
==> Installing php54-mcrypt dependency: gettext
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/gettext-0.18.2.mountain_lion.bottle.tar.gz
######################################################################## 100.0%
==> Pouring gettext-0.18.2.mountain_lion.bottle.tar.gz …Run Code Online (Sandbox Code Playgroud) 我在JavaScript中加密我的用户密码,如下所示:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
Run Code Online (Sandbox Code Playgroud)
它工作正常,但现在我试图在服务器端解密PHP,如下所示:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, "Secret Passphrase", base64_decode($password), MCRYPT_MODE_CBC, $iv);
Run Code Online (Sandbox Code Playgroud)
它根本不起作用,解密的密码字符串看起来很奇怪:
string(64) ">?OX2MS???v?<$????i????_??P???\??=?_6(?m????,4WT7??a"
Run Code Online (Sandbox Code Playgroud)
以下是有用评论之后我的JavaScript代码的当前状态:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
var ivHex = encryptedPassword.iv.toString();
var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
var keySize = encryptedPassword.algorithm.keySize;
var keyHex = encryptedPassword.key.toString();
var saltHex = encryptedPassword.salt.toString(); // must be sent
var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent
Run Code Online (Sandbox Code Playgroud)
我将saltHex和CipherTextHex发送到PHP服务器,我正在使用mcrypt_decrypt(),如下所示:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), $saltHex); …Run Code Online (Sandbox Code Playgroud) 我试图解码从服务器返回的PHP中的数据:我知道数据AES 256解码并具有PKCS7填充,但无法弄清楚它使用哪种块模式
这是我的PHP功能:
public function decode($data)
{
//AES decode
$iv = mcrypt_create_iv(GEServerConnection::FBENCRYPT_BLOCK_SIZE, MCRYPT_RAND);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->cryptKey, base64_decode($data), MCRYPT_MODE_ECB, $iv);
//return $data;
$len = strlen($data);
$pad = ord($data[$len - 1]);
return substr($data, 0, - $pad);
}
Run Code Online (Sandbox Code Playgroud)
和编码数据的例子
3KD+zb/2u5gGEWvOy0Q0nSQE9pbQZmg27iN6WLiO/Af9YjN8MhHOb8TMa5uETaab
Run Code Online (Sandbox Code Playgroud)
当我使用ECB(MCRYPT_MODE_ECB)进行解码时,它只解码数据的开头并且其余部分无法读取
"Please input yo??????g|??*P?Te??? R?B
Run Code Online (Sandbox Code Playgroud)
当用CBC(MCRYPT_MODE_CBC)模式解码时,它开始不可读
??0?=v??????.3ur username and password again"
Run Code Online (Sandbox Code Playgroud)
结果应该是(在Objective-c中使用CommonCryptor获得的mac):
"Please input your username and password again"
Run Code Online (Sandbox Code Playgroud)
有人知道什么是错的或如何以正确的方式解码它?
我有一个登录和注册表单,并使用加密库加密密码..我正在使用Xampp我的服务器,我的系统正常工作..
用于加密密码的代码:
$this->encrypt->encode('my password');
Run Code Online (Sandbox Code Playgroud)
添加加密库
$autoload['libraries'] = array('encrypt');
Run Code Online (Sandbox Code Playgroud)
并在config中设置密钥:
$config['encryption_key'] = 'nmsc encrypt secret key';
Run Code Online (Sandbox Code Playgroud)
我的代码在Windows中使用xampp服务器效果很好,但是当我试图将我的网站上传到ubuntu服务器时我发现了一个错误说
Encrypt库需要Mcrypt扩展
如何解决这个问题?参考本指南https://www.codeigniter.com/user_guide/libraries/encryption.html但我不知道如何安装该mcrypt.我的网站需要从ubuntu服务器运行.如何安装或修复该问题?
mcrypt ×10
php ×9
encryption ×5
aes ×3
blowfish ×2
javascript ×2
openssl ×2
codeigniter ×1
commoncrypto ×1
cryptojs ×1
homebrew ×1
macos ×1
node.js ×1
objective-c ×1
python ×1