programing tip

md5 암호화 및 해독

itbloger 2020. 12. 25. 09:01
반응형

md5 암호화 및 해독


코드를 사용 하고 데이터베이스에 $enrypt=md5($pass)삽입 $encrypt하고 있습니다. 해독 방법을 찾고 싶습니다. 해독 소프트웨어를 사용해 보았지만 해시가 정확히 16 바이트 여야한다고합니다. 암호를 해독하거나 16 바이트 md5 해시로 만드는 방법이 있습니까?

내 해시는 다음과 같습니다. c4ca4238a0b923820dcc


이미 언급했듯이 리소스 집약적이고 실용적이지 않으며 비 윤리적 인 무차별 대입 해킹과 같은 시도 없이는 MD5를 해독 할 수 없습니다.

그러나 다음과 같이 암호 등을 안전하게 암호화 / 복호화 할 수 있습니다.

$input = "SmackFactory";

$encrypted = encryptIt( $input );
$decrypted = decryptIt( $encrypted );

echo $encrypted . '<br />' . $decrypted;

function encryptIt( $q ) {
    $cryptKey  = 'qJB0rGtIn5UB1xG03efyCp';
    $qEncoded      = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
    return( $qEncoded );
}

function decryptIt( $q ) {
    $cryptKey  = 'qJB0rGtIn5UB1xG03efyCp';
    $qDecoded      = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
    return( $qDecoded );
}

암호화 된 방법을 솔트와 함께 사용하는 것이 더 안전 할 수 있지만 MD5 해시를 사용하는 것보다 좋은 다음 단계가 될 것입니다.


MD5를 해독하는 방법은 없습니다. 글쎄요,하지만 합리적인 방법은 없습니다. 그게 요점입니다.

다른 사람이 올바른 암호를 입력하고 있는지 확인하려면 사용자가 입력 한 모든 것을 MD5하고 데이터베이스에있는 것과 일치하는지 확인해야합니다.


/* you  can match the exact string with table value*/

if(md5("string to match") == $res["hashstring"])
 echo "login correct";

이 질문은 PHP로 태그가 지정됩니다. 하지만 많은 사람들이 현재 라 라벨 프레임 워크를 사용하고 있습니다. 미래에 누군가에게 도움이 될 수 있습니다. 그래서 라 라벨에 대답했습니다. 내부 기능으로 암호화 및 암호 해독이 더 쉽습니다.

$string = 'c4ca4238a0b923820dcc';
$encrypted = \Illuminate\Support\Facades\Crypt::encrypt($string);
$decrypted_string = \Illuminate\Support\Facades\Crypt::decrypt($encrypted);

var_dump($string);
var_dump($encrypted);
var_dump($decrypted_string);

참고 : config / app.php 파일의 키 옵션에서 16 자, 24 자 또는 32 자의 임의 문자열을 설정해야합니다. 그렇지 않으면 암호화 된 값이 안전하지 않습니다.

그러나 인증을 위해 암호화 및 암호 해독을 사용해서는 안됩니다. 오히려 해시 만들기 및 확인을 사용해야합니다.

데이터베이스에 비밀번호를 저장하려면 비밀번호 해시를 만들어 저장합니다.

$password = Input::get('password_from_user'); 
$hashed = Hash::make($password); // save $hashed value

비밀번호를 확인하려면 데이터베이스에서 계정에 저장된 비밀번호를 가져옵니다.

// $user is database object
// $inputs is Input from user
if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) {
  // Password is not matching 
} else {
  // Password is matching 
}

해시는 암호를 해독 할 수없는 이 체크 아웃 .

If you want to encrypt-decrypt, use a two way encryption function of your database like - AES_ENCRYPT (in MySQL).

But I'll suggest CRYPT_BLOWFISH algorithm for storing password. Read this- http://php.net/manual/en/function.crypt.php and http://us2.php.net/manual/en/function.password-hash.php

For Blowfish by crypt() function -

crypt('String', '$2a$07$twentytwocharactersalt$');

password_hash will be introduced in PHP 5.5.

$options = [
    'cost' => 7,
    'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);

Once you have stored the password, you can then check if the user has entered correct password by hashing it again and comparing it with the stored value.


It's not possible to decrypt MD5 hash which created. You need all information to decrypt the MD5 value which was used during encryption.

You can use AES algorithm to encrypt and decrypt

JavaScript AES encryption and decryption (Advanced Encryption Standard)

ReferenceURL : https://stackoverflow.com/questions/15194663/encrypt-and-decrypt-md5

반응형