Hướng dẫn mã hóa trong php

Như đã nêu, bạn không thể giải mã MD5 mà không cố gắng thực hiện một số thứ như hack vũ phu cực kỳ tốn tài nguyên, không thực tế và phi đạo đức.

Nội dung chính

  • Để lưu trữ mật khẩu trong cơ sở dữ liệu, tạo băm mật khẩu và sau đó lưu.$password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value
  • Để xác minh mật khẩu, lấy mật khẩu được lưu trữ của tài khoản từ cơ sở dữ liệu// $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 }
  • Video liên quan

Tuy nhiên, bạn có thể sử dụng một cái gì đó như thế này để mã hóa/giải mã mật khẩu/vv một cách an toàn:$input = "SmackFactory"; $encrypted = encryptIt( $input ); $decrypted = decryptIt( $encrypted ); echo $encrypted . '
' . $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 ); }

Sử dụng phương pháp encypted với muối thậm chí sẽ an toàn hơn, nhưng đây sẽ là bước tiếp theo tốt khi sử dụng hàm băm MD5.

Không có cách nào để giải mã MD5. Vâng, có, nhưng không hợp lý cách để làm điều đó. Đó là loại điểm.

Để kiểm tra xem ai đó đang nhập đúng mật khẩu, bạn cần MD5 bất cứ thứ gì người dùng nhập vào và xem nó có khớp với những gì bạn có trong cơ sở dữ liệu không.

/* you  can match the exact string with table value*/ if(md5("string to match") == $res["hashstring"]) echo "login correct";

Câu hỏi này được gắn thẻ với PHP. Nhưng nhiều người đang sử dụng Laravel framework ngay bây giờ. Nó có thể giúp ai đó trong tương lai. Đó là lý do tại sao tôi trả lời cho Laravel. Dễ dàng hơn để mã hóa và giải mã với các chức năng nội bộ.$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);

Lưu ý: Đảm bảo đặt chuỗi ngẫu nhiên 16, 24 hoặc 32 ký tự trong tùy chọn chính của tệp config/app.php. Nếu không, các giá trị được mã hóa sẽ không được bảo mật.

Nhưng bạn không nên sử dụng mã hóa và giải mã để xác thực. Thay vào đó, bạn nên sử dụng băm và kiểm tra.

Để lưu trữ mật khẩu trong cơ sở dữ liệu, tạo băm mật khẩu và sau đó lưu.$password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value

Để xác minh mật khẩu, lấy mật khẩu được lưu trữ của tài khoản từ cơ sở dữ liệu// $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 }

Không thể giải mã MD5 hàm băm được tạo. Bạn cần tất cả thông tin để giải mã giá trị MD5 được sử dụng trong quá trình mã hóa.

Bạn có thể sử dụng thuật toán AES để mã hóa và giải mã

Mã hóa và giải mã JavaScript AES (Tiêu chuẩn mã hóa nâng cao)

Băm không thể được giải mã kiểm tra cái này .

Nếu bạn muốn mã hóa-giải mã, hãy sử dụng chức năng mã hóa hai chiều của cơ sở dữ liệu của bạn như - AES_ENCRYPT (trong MySQL).

Nhưng tôi sẽ đề xuất thuật toán CRYPT_BLOWFISH để lưu trữ mật khẩu. Đọc này- http://php.net/manual/en/feft.crypt.php và http://us2.php.net/manual/en/feft.password- hàm băm.php

Đối với blowfish bởi crypt() chức năng -crypt('String', '$2a$07$twentytwocharactersalt$');


password_hash sẽ được giới thiệu trong PHP 5.5.$options = [ 'cost' => 7, 'salt' => 'BCryptRequires22Chrcts', ]; password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);

Khi bạn đã lưu trữ mật khẩu, bạn có thể kiểm tra xem người dùng đã nhập đúng mật khẩu hay chưa bằng cách băm mật khẩu và so sánh nó với giá trị được lưu trữ.

Video liên quan

Có lẽ bạn đã biết nhiều về MD5 và SHA1 dùng để mã hóa chuỗi thông tin đầu vào s1 và cho ra chuỗi thông tin được mã hóa s2. Về lý thuyết, chúng ta không thể dịch ngược được chuỗi s2 để ra dữ liệu ban đầu, mặc dù hiện nay có rất nhiều phương pháp và thuật toán đã làm rất tốt việc này.

Hàm md5() và sha1()

Để mã hóa thông tin đầu vào bằng MD5 hay SHA1, đơn giản bạn chỉ cần dùng hàm md5() và sha1(). Hãy xem ví dụ sau:

' . $password . ' được mã hóa thành: 

'; echo 'MD5: ' . md5($password) . '
'; // mật khẩu đã được mã hóa bằng md5 echo 'SHA1: ' . sha1($password) . ''; // mật khẩu đã được mã hóa bằng sha1 ?>

Để bảo mật hơn bạn có thể kết quả 2 hàm này với nhau để tạo ra chuỗi mã hóa khó dịch ngược hoặc tự viết thêm một số thuật toán cắt ghét chuỗi của riêng bạn.

Hàm md5_file() và sha1_file()

Như tên gọi, bạn có thể mã hóa md5 và sha1 cho một tập tin. Bạn có thể thực hiện đoạn code mã hóa đơn giản như sau:

$file = 'dammio.txt';
echo 'Mã hóa MD5 tập tin ' . $file . ': ' . md5_file($file);

Hàm crc32()

CRC là viết tắt của từ Cyclic Redundancy Check, tạm dịch là “Kiểm dư chu trình”, là một phương pháp kiểm tra và phát hiện lỗi, được sử dụng trong các mạng số và thiết bị lưu trữ để phát hiện sự thay đổi tình cờ đối với dữ liệu được truyền đi hay lưu trữ.

Hàm có thể dùng hàm crc32() để checksum hay kiểm tra dữ liệu nhận được có bị lỗi hay hư hỏng hay không. Hãy cùng xét đến ví dụ sau:

Hàm hash()

Hàm hash cho phép bạn mã hóa tất cả các dạng md5, sha1,… chỉ cần dùng hàm này. Cú pháp:

string hash (string $algo, string $data, bool $output)

Trong đó $algo là thuật toán mã hóa (MD5, SHA1,…), $data là dữ liệu cần mã hóa, $output là dạng đầu ra, nếu = TRUE là dạng dữ liệu đầu ra nhị phân, = FALSE (hay mặc định) là dữ liệu đầu ra văn bản.

Ví dụ mã hóa chuỗi ‘dammio’ bằng thuật toán RIPEMD (RIPE Message Digest), chủ yếu dùng trong mã hóa tiền ảo Bitcoin.

";
echo 'Nhị phân: ' . hash('ripemd160', 'dammio', TRUE);
?>

Ngoài ra bạn còn có hàm crypt() và password_hash() cũng với chức năng mã hóa thông tin tương tự.