Php加密,解密不带特殊字符,数字长度应为6-8


Php encrypt,decrypt without special characters and digits length should be 6-8

在php中,我想加密和解密数据。我不想使用特殊字符。我只有 6-8 位数字与字母和数字。对于加密和解密,我已经制作了此功能,但有时它无法解密加密的数字,也无法解密其长度与特殊字符。

function random_password($length = 8) {
    $password = "";
    $possible = "2346789bcdfghjkmnpqrtvwxyzBCDFGHJKLMNPQRTVWXYZ";
    $maxlength = strlen($possible);
    if ($length > $maxlength) {
        $length = $maxlength;
    }
    $i = 0;
    while ($i < $length) {
        $char = substr($possible, mt_rand(0, $maxlength-1), 1);
        if (!strstr($password, $char)) {
            $password .= $char;
            $i++;
        }
    }
    return $password;
}
function encrypt($plaintext, $salt) {
    $td = mcrypt_module_open('cast-256', '', 'ecb', '');
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, $salt, $iv);
    $encrypted_data = mcrypt_generic($td, $plaintext);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    $encoded_64 = base64_encode($encrypted_data);
    return trim($encoded_64);
}
function decrypt($crypttext, $salt) {
    $decoded_64=base64_decode($crypttext);
    $td = mcrypt_module_open('cast-256', '', 'ecb', '');
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, $salt, $iv);
    $decrypted_data = mdecrypt_generic($td, $decoded_64);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return trim($decrypted_data);
}

我有两个陈述,然后是很多问题

  1. 您编写的加密代码不安全,因此请勿使用它。并请告知您发现该代码的任何地方,他们正在分发不安全的加密代码。
    • 我的意思是,欧洲央行模式下的 CAST-256...用静脉注射?并使用MCRYPT_RAND?而且完全未经身份验证?没有安全专家会签署这一点。
  2. 在名为random_password()的函数中使用mt_rand()也令人担忧。您没有使用 CSPRNG。

你到底要什么?

我不想使用特殊字符。我只有 6-8 位数字与字母和数字。

所以,您希望输出大小在 6-8 位(为什么这个变量?)之间,只有字母数字字符?

2346789bcdfghjkmnpqrtvwxyzBCDFGHJKLMNPQRTVWXYZ

为什么没有元音?

你想在这里解决什么问题?

你为什么不直接使用化解/php加密,并使用你想要的任何密码呢?或者完全避开密码并使用其基于密钥的加密功能(默认)?

我建议使用安全的PHP加密库,而不是编写自己的加密库。

并且请务必告知您的消息来源他们发布的加密代码中的安全错误。使用该代码的人越少,互联网就越安全。