나는 예제로이 코드 조각을 물려 받았습니다, 나는 조금 더 "현대"만들려고 노력 해요 : 내가 PHP7에있어PHP에서 mcrypt_decrypt를 openssl_decrypt로 변환하는 방법은 무엇입니까?
$key='09KzF2qMBy58ZWg137N$I4h6UwJvp!ij';
$encrypted='Chttex_vuYYEK-oKQfwYrVCZYbnNh3tMgwGuK-VOsvt7TjF5M6MIcsE6e8DynZrHuxrmtmIpiN215WygdO-hzXnmx45RXzBWdxk_MkIvNoI=';
$encrypted = urlsafe_b64decode($encrypted);
$decrypted = decrypt($encrypted, $key);
$inflated = gzinflate($decrypted);
echo 'Decrypted: '.$inflated."<br />";
function urlsafe_b64decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function decrypt($data, $key)
{
return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB);
}
이 사용하려면 openssl을 변환하려고합니다. 나는 그것이 상당히 간단하게 1 : 1 변환 할 수 있지만 항상 "반환 것이라고 생각
function decrypt($string, $key)
{
return openssl_decrypt($string, 'AES-256-ECB', $key);
}
: 나는 문자열을 기존 'urlsafe_b64decode'기능을 통해 그것을 실행 후 다른 '해독'기능을 생성 그릇된". 내가 뭘 잘못했을지 모르겠다. 미리 감사드립니다.
편집 : 내가 사용하는 서비스는 .NET 상점이므로 암호화에 대한 .NET의 예가 여기에 있습니다. 2
Public Shared Function Encrypt(ByVal data As Byte()) As Byte()
Dim encrypted As Byte()
Using rijAlg = New System.Security.Cryptography.AesManaged()
rijAlg.Key = Encoding.ASCII.GetBytes("encryptionkeyhere")
rijAlg.Padding = System.Security.Cryptography.PaddingMode.None
rijAlg.Mode = System.Security.Cryptography.CipherMode.ECB
Dim encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV)
Using msEncrypt = New MemoryStream()
Using csEncrypt = New System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)
csEncrypt.Write(data, 0, data.Length)
End Using
encrypted = msEncrypt.ToArray()
End Using
End Using
Return encrypted
End Function
업데이트는 그래서 Mcrypt 라이브러리를 내 로컬 서버를 업데이트하고, 내 초기 코드에서 암호화 된 문자열을 디코딩 할 수 있었다. 이 원하는 응답이다 : "세션 id = 7bf727043d85e6963e640fb541d886a7454f8091 & RequestID가 = 1488925528"
googleing 및-보내고 유래 및 실험 후, 나는 아직도하려면 openssl을 사용하여 제대로 문자열의 암호를 해독 할 수 없습니다입니다. 심지어 가능할까요?
왜 단순히 Mcrypt로 문자열을 디코딩하고 OpenSSL로 다시 암호화하지 않습니까? –
아쉽게도 PHP7 서버이며 mcrypt 확장 프로그램을 설치하거나 ini 파일을 변경할 권한이 없습니다. – TerryMatula
ECB 모드를 사용하지 마십시오. 안전하지 않습니다. [ECB 모드] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)를 참조하고 펭귄까지 스크롤하십시오. 대신 무작위 IV가있는 CBC 모드를 사용하고 암호화 된 데이터 앞에 IV를 사용하여 암호 해독에 사용하면 비밀로 할 필요가 없습니다. – zaph