PHP中的Ruby乱码宝石?字符串的加密和解密

PHP中的Ruby乱码宝石?字符串的加密和解密,php,ruby,encryption,Php,Ruby,Encryption,如何在PHP中实现ruby gibberish gem,是否有任何库 我有加密字符串中的这些设置 cipher = Gibberish::AES.new('something') cipher.encrypt(string) #output #{"v":1,"adata":"","ks":256,"ct":"'+encrypted+'","ts":96,"mode":"gcm","cipher":"aes","iter":100000,"iv":"'+iv+'","salt":"'+key+'"

如何在PHP中实现ruby gibberish gem,是否有任何库

我有加密字符串中的这些设置

cipher = Gibberish::AES.new('something')
cipher.encrypt(string)
#output
#{"v":1,"adata":"","ks":256,"ct":"'+encrypted+'","ts":96,"mode":"gcm","cipher":"aes","iter":100000,"iv":"'+iv+'","salt":"'+key+'"}
我试过CypherJS和CypherJS,但都没用

我想在一个独立的PHP文件中实现所有这些。 我还尝试了php的open_ssl

$decrypted_msg = openssl_decrypt(
  "$encrypted", 'aes-256-cbc', "$salt:$password", null, $iv
);
这也不管用

他们正在加密和解密,但我想要与PHP中的ruby相同的结果,它不会给我与ruby乱七八糟的解密宝石相同的结果

我也尝试过:

<?php
function nl() {
    echo "<br/> \n";
}
// Encrypting
function encrypt($string, $key) {
    $enc = "";
    global $iv;
    $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);

  return base64_encode($enc);
}

// Decrypting 
function decrypt($string, $key) {
    $dec = "";
    $string = trim(base64_decode($string));
    global $iv;
    $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
  return $dec;
}
$iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);

$stuff="String to enc/enc/dec/dec =,=,";
$key="XiTo74dOO09N48YeUmuvbL0E";

$encrypted = encrypt($stuff, $key);
$decrypted = decrypt($encrypted, $key);

echo "Encrypted is ".$encrypted . nl(); 
echo "Decrypted is ".$decrypted . nl(); 
?>

同样,这会产生不同的结果


我觉得我已经尝试了在互联网上能找到的一切,现在我完全不知所措。

除非你必须与遗留代码交互,否则不要使用3DES。最好不要使用mcrypt,它是弃用软件,多年来没有更新,不支持标准PKCS 7(née PKCS 5)填充,只有非标准的空填充,甚至不能用于二进制数据。mcrypt在2003年就有很多杰出的作品。取而代之的是考虑使用,或者,他们提供一个完整的解决方案,并保持和纠正。谢谢你的建议…我想我会在我的php服务器上安装ruby。不必查看乱码的源代码,我可以告诉你密码是通过PBKDF2派生的,PBKDF2生成一个256位密钥,加密实际上是使用该密钥的AES-GCM。身份验证标签只有96位长,可能更长。是的,但我想用PHP或javascript来做这件事。。。关于AES-GCM,你是对的