10


PHP でデータを暗号化/復号化する必要があります。私はこれにまったく慣れていませんが、Libsodium-PHP が AES 暗号化に最適なツールであることを読みました。私が調査した他の PHP 暗号化ライブラリと同様に、Libsoduim-PHP は、ライブラリの使用方法に関するドキュメントをほとんど提供していないように見えました (私が見つけたもの)。PHP 暗号化の経験がある人は、良い学習リソースを教えてくれるか、Libsoduim-PHP を使用して数行のサンプル コードを書いてもらえますか?
助けてくれてどうもありがとう、
アトラス

4

2 に答える 2

17

私が調査した他の PHP 暗号化ライブラリと同様に、Libsoduim-PHP は、ライブラリの使用方法に関するドキュメントをほとんど提供していないように見えました (私が見つけたもの)。

libsodium-php Github ページから、libsodiumを使い始めるために知っておくべきことをすべて網羅した無料のオンラインブックへの直接リンクを見つけることができます。

最後の章にはlibsodium のレシピが含まれていますが、各章には詳細な使用法に関する情報が含まれています。

特に AES が必要な場合は、この をお読みください

「AES かバスト」の要件が頭に浮かんでいない場合、具体的に AES を使用しないと部門が解雇され、開発者が銃殺隊に直面することになる場合は、暗号化にXsalsa20を使用する crypto_secretbox の使用を検討する必要があります。 Poly1305 認証タグを添付します。(これは認証された暗号化であり、ほとんど常に使用したいものです。)

イージーモードが必要な場合は、 Haliteも調べてください。

于 2015-12-27T05:17:13.440 に答える
9

PHP バージョン >= 7.2

PHP >= 7.2 を使用している場合は、代わりに組み込みのナトリウムコア拡張機能を使用してください。

実装例

<?php 
//Simple Usage

/**
* Encrypt a message
* 
* @param string $message - message to encrypt
* @param string $key - encryption key
* @return string
*/
function safeEncrypt($message, $key)
{
    $nonce = random_bytes(
        SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
    );

    $cipher = base64_encode(
        $nonce.
        sodium_crypto_secretbox(
            $message,
            $nonce,
            $key
        )
    );
    sodium_memzero($message);
    sodium_memzero($key);
    return $cipher;
}

/**
* Decrypt a message
* 
* @param string $encrypted - message encrypted with safeEncrypt()
* @param string $key - encryption key
* @return string
*/
function safeDecrypt($encrypted, $key)
{   
    $decoded = base64_decode($encrypted);
    if ($decoded === false) {
        throw new Exception('Scream bloody murder, the encoding failed');
    }
    if (mb_strlen($decoded, '8bit') < (SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + SODIUM_CRYPTO_SECRETBOX_MACBYTES)) {
        throw new Exception('Scream bloody murder, the message was truncated');
    }
    $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
    $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');

    $plain = sodium_crypto_secretbox_open(
        $ciphertext,
        $nonce,
        $key
    );
    if ($plain === false) {
         throw new Exception('the message was tampered with in transit');
    }
    sodium_memzero($ciphertext);
    sodium_memzero($key);
    return $plain;
}
//Encrypt & Decrypt your message
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

$enc = safeEncrypt('Encrypt This String...', $key); //generates random  encrypted string (Base64 related)
echo $enc;
echo '<br>';
$dec = safeDecrypt($enc, $key); //decrypts encoded string generated via safeEncrypt function 
echo $dec;
于 2018-10-07T13:13:40.643 に答える