Daha önce + + Kripto yoluyla şifrelenmiş OpenSSL bir dize şifresini nasıl?

0 Cevap php

EDIT: I found out that the keys aren't the problem like I said in the comments. I can use them without any issues to encrypt and decrypt data on OpenSSL.

But I need to decrypt a string on OpenSSL that was previously encrypted via Crypto++ and that's not working.

I'll post additional details later.

Merhaba, ben bir RSA ortak Kripto ile üretilen anahtar + + ve şimdi PHP ve OpenSSL'de üzerinden şifresini (hala başarısız) çalışıyorum kullanarak bir dize şifreli var.

Ben ne yapıyorum:

  • Base64 veya kodlanmış onaltılık DEĞİLDİR özel anahtar "rsa-private.key" adlı bir dosyada saklanır
  • Şifreli mesaj "message.txt" saklanır (onaltılık kodlanmış)

ADIM 1: $key = file_get_contents("rsa-private.key");: yoluyla özel anahtarı yükleyin

ADIM 2: Aşağıdaki işlevi kullanarak PEM biçime anahtarı dönüştürün:

<?php
function pkcs8_to_pem($der) {

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
    static $END_MARKER = "-----END PRIVATE KEY-----";

    $value = base64_encode($der);

    $pem = $BEGIN_MARKER . "\n";
    $pem .= chunk_split($value, 64, "\n");
    $pem .= $END_MARKER . "\n";

    return $pem;
    }

    $PEMprivatekey = pkcs8_to_pem($key); 
?>

(Stackoverflow.com/questions/1357569 /)

ADIM 3: OpenSSL'de tarafından daha sonraki kullanım için anahtar hazırlayın: (herhangi bir sorun olmadan)

<?php
$privateKey = openssl_get_privatekey($PEMprivatekey);
if (!$privateKey) {
    echo "Cannot get public key";
}
?>

ADIM 4: mesajı alın ve aşağıdaki işlevi kullanarak mesajı deşifre:

<?php
function hex_to_str($hex){

    for ($i=0; $i < strlen($hex)-1; $i+=2) {
    $string .= chr(hexdec($hex[$i].$hex[$i+1])); }
    return $string;
}

$message = file_get_contents("message.txt");` 
$encryptedstring = hex_to_str($message);
?>

ADIM 5: dize azalmak: (çalışmıyor)

<?php
openssl_private_decrypt($encryptedstring, $decrypteddata, $privateKey);
if (!$decrypteddata) {
    echo "........"; } else { echo $decrypteddata; }
?>

$ Decrypteddata her zaman boştur.

Çalışmıyor değil neden ben çözemiyorum. Herkes yapıyorum yanlış bir şey fark ettim?

0 Cevap