<?php
$out = fopen('php://stdout', "w");
define('ENCRYPTION_KEY', 'ab86d144e3f080b61c7c2e43');
// Encrypt
$src = "Тестируем обратимое шифрование на php 7";
// Encrypt
function encrypt($text,$key)
{
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($text, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true); $input = array("=", "b", "c", "d", "e", "f", "g", "j", "k", "y", "a"); $output = array("!№", "#", "|", "%", "@", "-", "_", ")", "$", "^", "&:&"); $ciphertext = str_replace($input, $output, $ciphertext); return $ciphertext;
}
// Decrypt
function decrypt($hash,$key)
{
$input = array("=", "b", "c", "d", "e", "f", "g", "j", "k", "y", "a"); $output = array("!№", "#", "|", "%", "@", "-", "_", ")", "$", "^", "&:&");
//var_dump($c);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$hmac = substr($c, $ivlen, $sha2len=32); $ciphertext_raw = substr($c, $ivlen+$sha2len); $plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true); if (hash_equals($hmac, $calcmac))
{
return $plaintext;
}
}
$encrypted = encrypt($src, ENCRYPTION_KEY);
//fwrite($out, sprintf("%s\n", $encrypted));
$decrypted = decrypt($encrypted, ENCRYPTION_KEY);
PD9waHAKCiRvdXQgPSBmb3BlbigncGhwOi8vc3Rkb3V0JywgInciKTsKCmRlZmluZSgnRU5DUllQVElPTl9LRVknLCAnYWI4NmQxNDRlM2YwODBiNjFjN2MyZTQzJyk7CgovLyBFbmNyeXB0CiRzcmMgPSAi0KLQtdGB0YLQuNGA0YPQtdC8INC+0LHRgNCw0YLQuNC80L7QtSDRiNC40YTRgNC+0LLQsNC90LjQtSDQvdCwIHBocCA3IjsKCi8vIEVuY3J5cHQKZnVuY3Rpb24gZW5jcnlwdCgkdGV4dCwka2V5KQp7CgkkaXZsZW4gPSBvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoJGNpcGhlcj0iQUVTLTEyOC1DQkMiKTsKCSRpdiA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygkaXZsZW4pOwoJJGNpcGhlcnRleHRfcmF3ID0gb3BlbnNzbF9lbmNyeXB0KCR0ZXh0LCAkY2lwaGVyLCAka2V5LCAkb3B0aW9ucz1PUEVOU1NMX1JBV19EQVRBLCAkaXYpOwoJJGhtYWMgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRjaXBoZXJ0ZXh0X3JhdywgJGtleSwgJGFzX2JpbmFyeT10cnVlKTsKCSRjaXBoZXJ0ZXh0ID0gYmFzZTY0X2VuY29kZSggJGl2LiRobWFjLiRjaXBoZXJ0ZXh0X3JhdyApOwoJJGlucHV0ID0gYXJyYXkoIj0iLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaiIsICJrIiwgInkiLCAiYSIpOwoJJG91dHB1dCAgID0gYXJyYXkoIiHihJYiLCAiIyIsICJ8IiwgIiUiLCAiQCIsICItIiwgIl8iLCAiKSIsICIkIiwgIl4iLCAiJjomIik7Cgl2YXJfZHVtcCgkY2lwaGVydGV4dCk7CgkkY2lwaGVydGV4dCA9IHN0cl9yZXBsYWNlKCRpbnB1dCwgJG91dHB1dCwgJGNpcGhlcnRleHQpOwoJdmFyX2R1bXAoJGNpcGhlcnRleHQpOwoJcmV0dXJuICRjaXBoZXJ0ZXh0Owp9Ci8vIERlY3J5cHQKZnVuY3Rpb24gZGVjcnlwdCgkaGFzaCwka2V5KQp7CgkkaW5wdXQgPSBhcnJheSgiPSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJqIiwgImsiLCAieSIsICJhIik7Cgkkb3V0cHV0ICAgPSBhcnJheSgiIeKEliIsICIjIiwgInwiLCAiJSIsICJAIiwgIi0iLCAiXyIsICIpIiwgIiQiLCAiXiIsICImOiYiKTsKCXZhcl9kdW1wKCRoYXNoKTsKCSRoYXNoID0gc3RyX3JlcGxhY2UoJG91dHB1dCwgJGlucHV0LCAkaGFzaCk7Cgl2YXJfZHVtcCgkaGFzaCk7CgkKCSRjID0gYmFzZTY0X2RlY29kZSgkaGFzaCk7CgkvL3Zhcl9kdW1wKCRjKTsKCSRpdmxlbiA9IG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkY2lwaGVyPSJBRVMtMTI4LUNCQyIpOwoJJGl2ID0gc3Vic3RyKCRjLCAwLCAkaXZsZW4pOwoJJGhtYWMgPSBzdWJzdHIoJGMsICRpdmxlbiwgJHNoYTJsZW49MzIpOwoJJGNpcGhlcnRleHRfcmF3ID0gc3Vic3RyKCRjLCAkaXZsZW4rJHNoYTJsZW4pOwoJJHBsYWludGV4dCA9IG9wZW5zc2xfZGVjcnlwdCgkY2lwaGVydGV4dF9yYXcsICRjaXBoZXIsICRrZXksICRvcHRpb25zPU9QRU5TU0xfUkFXX0RBVEEsICRpdik7CgkkY2FsY21hYyA9IGhhc2hfaG1hYygnc2hhMjU2JywgJGNpcGhlcnRleHRfcmF3LCAka2V5LCAkYXNfYmluYXJ5PXRydWUpOwoJdmFyX2R1bXAoaGFzaF9lcXVhbHMoJGhtYWMsICRjYWxjbWFjKSk7CglpZiAoaGFzaF9lcXVhbHMoJGhtYWMsICRjYWxjbWFjKSkKCXsKCSAgICByZXR1cm4gJHBsYWludGV4dDsKCX0KfQkKCmZ3cml0ZSgkb3V0LCBzcHJpbnRmKCIlc1xuIiwgJHNyYykpOwokZW5jcnlwdGVkID0gZW5jcnlwdCgkc3JjLCBFTkNSWVBUSU9OX0tFWSk7Ci8vZndyaXRlKCRvdXQsIHNwcmludGYoIiVzXG4iLCAkZW5jcnlwdGVkKSk7CgokZGVjcnlwdGVkID0gZGVjcnlwdCgkZW5jcnlwdGVkLCBFTkNSWVBUSU9OX0tFWSk7CmZ3cml0ZSgkb3V0LCBzcHJpbnRmKCIlc1xuIiwgJGRlY3J5cHRlZCkpOwoKCmZjbG9zZSgkb3V0KTsK