首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Libsodium PHP加密/解密AES

如何使用Libsodium PHP加密/解密AES
EN

Stack Overflow用户
提问于 2015-12-27 12:42:59
回答 2查看 16.6K关注 0票数 10

我需要用PHP加密/解密数据。我对此完全陌生,但是我读到过Libsodium PHP是AES加密的最佳工具。与我研究过的其他PHP加密库非常相似,Libsoduim-PHP似乎几乎没有提供有关如何使用该库的文档(我能够找到)。有PHP加密经验的人可以给我介绍一个好的学习资源,或者使用Libsoduim-PHP编写几行示例代码吗?

非常感谢你的帮助,

地图集

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-27 13:17:13

与我研究过的其他

加密库一样,Libsoduim-PHP似乎几乎没有提供有关如何使用该库的文档(我能够找到)。

the libsodium-php Github page上,您可以找到a free online 的直接链接,该链接涵盖了开始使用link所需了解的所有内容。

最后一章包含libsodium recipes,但每一章都包含详细的用法信息。

如果你特别需要AES,read this

如果你没有“AES -or- just”的要求,不专门使用AES意味着你的部门被解雇,你的开发人员面临行刑队,你应该考虑使用crypto_secretbox,它使用Xsalsa20进行加密,并附加一个Poly1305身份验证标签。(这是authenticated encryption,您几乎要始终使用它。)

如果你想要简单模式,也可以看看Halite

票数 17
EN

Stack Overflow用户

发布于 2018-10-07 21:13:41

PHP版本>= 7.2

如果您使用的是PHPWeb7.2,请改用内置的>=扩展。

示例实现

代码语言:javascript
复制
<?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;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34477643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档