首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mcrypt未解密

Mcrypt未解密
EN

Stack Overflow用户
提问于 2017-03-07 23:19:14
回答 1查看 206关注 0票数 0

我正在开发一个小程序,它必须加密一个基本的句子并回显结果。然后,我希望能够复制粘贴结果,并能够以与编码相同的方式解码文本。它不需要太安全,因此我选择使用Mcrypt。

当我尝试解密时,它给出了奇怪的(ASCII?)我不知道它们是从哪里来的。我试着用base64编码/解码来解决这个问题,但也没有帮助。我需要做哪些更改才能让它正常工作?

代码语言:javascript
复制
<?php

// Define Mcrypt variables
$enc = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = 'SanderDitIsNodigVoor16bi';
$iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM);

// Check if 'submit' is set
if (isset($_POST['submit'])) {

    // Check if 'text' is set
    if (!empty($_POST['text'])) {

        // Check if 'crypt' is set
        if (isset($_POST['crypt'])) {

            // Retrieve 'text'
            $input = $_POST['text'];

            // Check for encrypt/decrypt
            switch ($_POST['crypt']) {
                case 'encrypt':
                    $result = encrypt();
                    break;
                case 'decrypt':
                    $result = decrypt();
                    break;
            }

            echo $result;
        }

        // If 'crypt' is not set
        else {
            echo 'Please select encrypt or decrypt.';
        }
    }

    // If 'text' is not set
    else {
        echo 'Please fill in some text.';
    }
}

function encrypt() {
    global $enc, $key, $input, $mode, $iv;
    $encrypted = mcrypt_encrypt($enc, $key, $input, $mode, $iv);
    $output = base64_encode($encrypted);
    return $output;
}

function decrypt() {
    global $enc, $key, $input, $mode, $iv;
    $decrypted = base64_decode($input);
    $output = mcrypt_decrypt($enc, $key, $decrypted, $mode, $iv);
    return $output;
}

?>

需要明确的是,如果我将mcrypt_decrypt包含在加密中,以确保它不是我在函数本身中弄乱的东西,它会正确地解密它。但当我试图将两者分开时,却没有。我被难住了。

EN

回答 1

Stack Overflow用户

发布于 2017-03-07 23:34:14

您将向encryptdecrypt发送相同的输入,即:

代码语言:javascript
复制
$input = $_POST['text'];

encrypt将成功加密,但您总是试图解密“已解密”的短语!

必须将encrypted短语传递给解密函数

不要忘记重要的一点,mcrypt_*扩展已经被弃用了:

这个扩展依赖于libmcrypt,而libmcrypt自2007年以来一直没有得到维护。

请不要依赖它,考虑切换到维护良好的替代方案(openssl,crypt,密码散列函数,phpseclib,password_compat...)

并且,试着停止使用global变量,这是不推荐的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651967

复制
相关文章

相似问题

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