0

小さな文字列を暗号化できますが、118 文字を超えると機能しませんか? 何か案が ?

private function encryptData($plaintext) {

    $plaintext = '{ "id":"1" "name":"Bottled Beer" "description":"" "parent_id":"111" "taxonomy":"SIMPLE_PLU" },{ "id":"2" "name":"Stout" }';

    $publicKey = "../ssh_keys/coasts/public/pub.pem";  

    $fp=fopen($publicKey,"r"); 
    $pub_key_string=fread($fp,8192); 
    fclose($fp); 

    $pubKey = openssl_pkey_get_public($pub_key_string);

    openssl_public_encrypt($plaintext, $encrypted, $pubKey);

    return $encrypted;
}
4

1 に答える 1

6

暗号化に使用されるプレーン データの長さは、キーの長さによって異なります。キーの長さから 11 を引いた数より大きくてはなりません。たとえば、2048 ビット キーを使用する場合、最大長は 2048/8 - 11 です。 = 245。
その制限を超えるデータを処理する必要がある場合は、プレーンデータをブロックに分割し、それぞれを暗号化し、暗号ブロックを連結できます (それらの長さは常にキーの長さとバイト単位で等しくなります)。もちろん、連結された暗号データ​​を復号化する際にも同じことを行う必要があります。

于 2013-09-17T08:39:36.577 に答える