laravel PHP加密计划文本aes 128 cbc SHA1 base64 php与私人.pem密钥

daupos2t  于 2023-03-19  发布在  PHP
关注(0)|答案(1)|浏览(105)

在终端中运行命令openssl dgst -sha1 -sign PrivateKey.pem -out Register1.sha1 Register1.txt,然后运行命令openssl enc -base64 -in Register1.sha1 -out Register1.b64 -A我得到一个包含哈希文本的文件。我需要在PHP中重现相同的结果。我可以加密和解密文本。但是,PHP生成的散列与在openssl中运行命令生成的散列不同

$encrypt_method = "DES-EDE-ECB";

    // //PRIVATE KEY
    $private_key = openssl_pkey_get_private(file_get_contents('./hash_key/ChavePrivada.pem'));
    $private_key_details = openssl_pkey_get_details($private_key);
    //PRIVATE KEY
    
    $iv = substr(hash('sha1', $encrypt_method), 0, 16);
    $key = hash('sha1', $private_key_details['key']);

    // $encryptToken = openssl_encrypt($string, $encrypt_method, $key, OPENSSL_RAW_DATA, $iv);
    $encryptToken = openssl_encrypt($string, $encrypt_method, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);;
    $encryptToken = base64_encode($encryptToken);//STRING ENCRYPTED
    $decryptToken = openssl_decrypt(base64_decode($encryptToken), $encrypt_method, $key, OPENSSL_RAW_DATA, $iv);//STRING DECRYPTED

    $output = [
        'encryptToken' => $encryptToken,
        'decryptToken' => $decryptToken,
    ];
    
    return $output;
pcww981p

pcww981p1#

您的PHP代码会立即严重偏离轨道,我不知道您为什么要这样做。
你知道openssl_sign()的存在,对吧?
短:

function php_sign($value, $pkey_pem, $algorithm = OPENSSL_ALGO_SHA1) {
    $pkey = openssl_pkey_get_private($pkey_pem);
    openssl_sign($value, $signature, $pkey, $algorithm);
    return $signature;
}

完整:

$pair = openssl_pkey_new();

$priv = openssl_pkey_get_private($pair);
openssl_pkey_export($priv, $priv_out);

$pub_out  = openssl_pkey_get_details($pair)['key'];
$pub  = openssl_pkey_get_public($pub_out);

function cli_sign($value, $pkey_pem) {
    $pipe_spec = [
        [ 'pipe', 'r' ], // fd 0 - STDIN
        [ 'pipe', 'w' ], // fd 1 - STDOUT
        [ 'pipe', 'w' ], // fd 2 - STDERR
        [ 'pipe', 'r' ]  // fd 3
    ];
    $handle = proc_open(
        "openssl dgst -sha1 -sign /proc/self/fd/3",
        $pipe_spec, $pipes
    );
    fwrite($pipes[3], $pkey_pem); // first write the private key into the pipe
    fclose($pipes[3]); // close our end of the pipe

    fwrite($pipes[0], $value); // write the input
    fclose($pipes[0]);

    $results = [
        'stdout' => stream_get_contents($pipes[1]),
        'stderr' => stream_get_contents($pipes[2]),
        'exit_code' => proc_close($handle)
    ];

    if( $results['exit_code'] !== 0 ) {
        throw new \Exception('Fission mailed: ' . json_encode($results));
    }

    return $results['stdout'];
}

function php_sign($value, $pkey_pem, $algorithm = OPENSSL_ALGO_SHA1) {
    $pkey = openssl_pkey_get_private($pkey_pem);
    if( ! openssl_sign($value, $signature, $pkey, $algorithm) ) {
        throw new Exception('Fission mailed: ' . openssl_error_string());
    }
    return $signature;
}

$value = 'foobar';

$cli_sig = cli_sign($value, $priv_out);
$php_sig = php_sign($value, $priv_out);

var_dump(
    $priv_out,
    $pub_out,
    base64_encode($cli_sig),
    openssl_verify($value, $cli_sig, $pub) ? 'pass' : 'fail',
    base64_encode($php_sig),
    openssl_verify($value, $php_sig, $pub) ? 'pass' : 'fail'
);

输出:

string(1704) "-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCNHc9R/nZxe7qD
PJ6qgiyt7I8z+FfCzAPzH55zvjReEh5flMAojzLpgD1tWD/Ju0CimNRNcoULMUeg
Gk8mQSU2BL/d4aDFByZptoFQ7b1a9NGNzxc3dDsG3OjXkexGkupA+goxIzZjgEhc
AU5cqk0Kq4F7hr1jbb4brtXjOtnrDzTwwyhiIIW73wZ/s7lI4k4CPxndN8ADJ6jx
1GH0Ns/2mflmX4eS/gBRMv75na1t4jZ3EmVkGiP9G0feYThUFjuMlkbyuWnjg5/z
H2KIbfSbwFE3VQfA03VRWOWz1QMHtrHDclwvWx4FsPsnSw957ykyoBv9EdR641WI
ABltzwTZAgMBAAECggEADaVQTZwkVUei+tslzKnXKt+xM/6pHeEfO1ICFIHUC99c
qIl4e3OSzMQ7LGkC4hMFZl5jnombFpX8Ax4IK/7TW6yMkSbRpmZ77xpYLuc5DvlA
Okzy8HMrh2JdRwXeqdm9upgd3C/iK9pVJPB2D2fjGKEKXajjL3YxPU65csZXbu9e
DRtgjYjA7al5LG9/vQ7gztGpikFJXBPQiDY15vK9TotDCi4ML62Jbr+aMH4Ao908
LG/ks/aKP8YRmnN3o1qTDjQD7FUQ6336wYy+Sm7eUlYPpWt3pMc0Qw5WVO9hYDtU
UokDQ4Wi/vf5zQZo3vtiCnEcnKEl5BsDyO+KcIWZMQKBgQC1525JLMqt8F4bax6g
MqI3YNZJOTFxMoVMcvwrzvPPN7L7DpzDoqznwnoMZZeOPaBH323hHcUFdx5oF5+E
MtgWlDQnVTHX8s7zwoWxNoyDYX6BCMZt0+Kp7hJjGqI/qaPTGsztbHZaLw/Y+S2C
VbaQJEk1wQZYn6OXqJ0w1U7x2wKBgQDGmSLErAuhkTyrgGJodII1NW03kmfdfaQq
/xV5NY48bOdAseE1dhdP9/p1S1upKHrOsXBw8c0/OymTpnNp2YTEJq/rkmTw38i5
yCF7YnoNlya/uLEVQbXGZSnM2Q/SaQhl/ULnEIY+1PKKMti/m0wAElwAIAUiV9ia
U5dXHYjkWwKBgCuUX4qubXxQius8taChoNVtoMj4J8070k2nepywPx8U9A9Lx+ji
z1PS9tSDflS4lO7DK5r0O+B8Uk+T4UaVu8llBj2qHn/jDwu9PbRgIjfTorAdPxTO
343gmI0fs2FXLgWEdTYodw5SGhTcVbfU+yD7YIK9VNzkmhfacJZjdD9jAoGAYoQI
iUNHKcigLfsr1eElzjtIiG6p82emDmYnQs9cVYE4XhFfRGPmQJckuRa+y3T3Jp1C
x+RLCnjQsRu62OE8SQlf7x3Z0NtR+UbbxRcesKswX57AyWilQVthlup+PMQ5lE5D
59d8oKKGBiQe/T2OP+LbnHxFz7mAC144DtDp3U0CgYBUl1yra/5LQtAGhpC2Npun
JLHuhy/caCTZu6I9DwbeH7Tbbcyr+ILgliEPwxcL0WUMoHNBJpJRqQfDJMKnYRux
LcCSmtRQhpZo6Et9FyJY0RBey57ThWrc0vXbgxVKst6DpcHWW1NijV+Yed1ihAgJ
ydzvQAZrDVoWEJWCy3yFcA==
-----END PRIVATE KEY-----
"
string(451) "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjR3PUf52cXu6gzyeqoIs
reyPM/hXwswD8x+ec740XhIeX5TAKI8y6YA9bVg/ybtAopjUTXKFCzFHoBpPJkEl
NgS/3eGgxQcmabaBUO29WvTRjc8XN3Q7Btzo15HsRpLqQPoKMSM2Y4BIXAFOXKpN
CquBe4a9Y22+G67V4zrZ6w808MMoYiCFu98Gf7O5SOJOAj8Z3TfAAyeo8dRh9DbP
9pn5Zl+Hkv4AUTL++Z2tbeI2dxJlZBoj/RtH3mE4VBY7jJZG8rlp44Of8x9iiG30
m8BRN1UHwNN1UVjls9UDB7axw3JcL1seBbD7J0sPee8pMqAb/RHUeuNViAAZbc8E
2QIDAQAB
-----END PUBLIC KEY-----
"
string(344) "P/IERBSgVBix6b1nsXfCVB3yiHSJolrG8y8BbKbqYsT9zeHhAvd636qB5bjeFbSwlUNJ93Pi5mwiMXweEiGvhFi9/E2vuKBwANZNuroof1s4gPaWDnGpTOeo5JVD7xLnxNrbrsYM/hQUe+3mJN26bRbYx20z1raxYmppLyP9iNTDHvQdbqBO2hHDHSjzW6icK6y43h7Xp6UTcBv3mC9FTmuXy7MISgdHpDFOn9Gy8/651FXEp1ag/y8w3sdeHjrKMk58IAn7MVxCJB0TFIB9IqCFxyTrGu/zQcFi0e/WoqJoCRj8/opYFE9a/6P+kF5ARydfAcL+rtX72MdYgamXeg=="
string(4) "pass"
string(344) "P/IERBSgVBix6b1nsXfCVB3yiHSJolrG8y8BbKbqYsT9zeHhAvd636qB5bjeFbSwlUNJ93Pi5mwiMXweEiGvhFi9/E2vuKBwANZNuroof1s4gPaWDnGpTOeo5JVD7xLnxNrbrsYM/hQUe+3mJN26bRbYx20z1raxYmppLyP9iNTDHvQdbqBO2hHDHSjzW6icK6y43h7Xp6UTcBv3mC9FTmuXy7MISgdHpDFOn9Gy8/651FXEp1ag/y8w3sdeHjrKMk58IAn7MVxCJB0TFIB9IqCFxyTrGu/zQcFi0e/WoqJoCRj8/opYFE9a/6P+kF5ARydfAcL+rtX72MdYgamXeg=="
string(4) "pass"

相关问题