Hướng dẫn dùng sha1 oracle trong PHP

# Description

Hàm sha1[] trong php có tác dụng chuyển một chuỗi sang một chuỗi mới đã được mã hóa theo tiêu chuẩn sha1.

Trong php không có hàm nào hỗ trợ chuyển một chuỗi đã được sử dụng sha1[] sang chuỗi ban đầu.

# Parameters

Cú pháp: string sha1 [ string $str [, bool $raw_output = false ] ]

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong đó

  • $str là chuỗi cần mã hóa
  • $raw_output có giá trị TRUE hoặc FALSE, mặc định là false.
    • Nếu TRUE thì hàm sẽ trả về chuỗi nhị phân với 20 ký tự [đã mã hóa]
    • Nếu FALSE thì hàm trả về chuỗi thập lục phân gồm  40 ký tự [đã mã hóa]

# Return Values

Trả ra một chuỗi số thập lục phân với chiều dài 40 ký tự

# Example

Mã hóa với $raw_output = false

$str = 'freetuts.net';

echo sha1[$str];
// kêt quả: 8d9fa09de2e997d8fbb544326b84d1f894cd3ca3

echo sha1[$str, false];
// kêt quả: 8d9fa09de2e997d8fbb544326b84d1f894cd3ca3

Mã hóa với $raw_output = true

$str = 'freetuts.net';

echo sha1[$str, true];
// kêt quả: Ÿ âé—ØûµD2k„Ñø”Í aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d Crypt/SHA512 =>
$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21 

Vì vậy, lựa chọn cho PHP là Crypt / Blowfish [BCrypt], Crypt / SHA256 hoặc Crypt / SHA512. Hoặc ít nhất là Crypt / MD5 [PHK]. Xem www.php.net/manual/en/ Chức năng.crypt.php

15 hữu ích 5 bình luận chia sẻ

answer

13

Sử dụng SHA256. Nó không phải là hoàn hảo, như SHA512sẽ là lý tưởng cho một băm nhanh, nhưng trong số các tùy chọn, nó là lựa chọn xác định. Theo bất kỳ công nghệ băm nào, hãy đảm bảo muối băm để tăng cường bảo mật.

Như một lưu ý thêm, FRKT, vui lòng chỉ cho tôi nơi ai đó có thể dễ dàng bẻ khóa băm SHA256 muối? Tôi thực sự rất quan tâm để xem điều này.

Chỉnh sửa quan trọng:

Trong tương lai, vui lòng sử dụng bcryptnhư một hàm băm cứng. Thông tin thêm có thể được tìm thấy ở đây .

Chỉnh sửa về muối:

Sử dụng một số ngẫu nhiên hoặc luồng byte ngẫu nhiên, v.v. Bạn có thể sử dụng trường duy nhất của bản ghi trong cơ sở dữ liệu của mình làm muối, theo cách này, muối sẽ khác nhau trên mỗi người dùng.

13 hữu ích 5 bình luận chia sẻ

answer

4

Điều mà mọi người dường như còn thiếu là nếu hacker có quyền truy cập vào cơ sở dữ liệu, anh ta có thể cũng có quyền truy cập vào tệp php đã băm mật khẩu và có thể chỉ cần sửa đổi nó để gửi cho anh ta tất cả các tổ hợp mật khẩu tên người dùng thành công. Nếu anh ta không có quyền truy cập vào thư mục web, anh ta luôn có thể chỉ cần chọn một mật khẩu băm nó và ghi nó vào cơ sở dữ liệu. Nói cách khác, thuật toán băm không thực sự quan trọng như bảo mật hệ thống và việc hạn chế các nỗ lực đăng nhập cũng nếu bạn không sử dụng SSL thì kẻ tấn công chỉ có thể nghe ngóng kết nối để lấy thông tin. Trừ khi bạn cần thuật toán mất nhiều thời gian để tính toán [cho mục đích của riêng bạn] thì SHA-256 hoặc SHA-512 với một muối cụ thể của người dùng là đủ.

Như một biện pháp bảo mật bổ sung, hãy thiết lập một tập lệnh [bash, batch, python, v.v.] hoặc chương trình và đặt cho nó một cái tên khó hiểu và kiểm tra xem login.php có thay đổi hay không [kiểm tra dấu ngày / giờ] và gửi email cho bạn nếu nó có. Cũng có thể nên ghi lại tất cả các lần đăng nhập bằng quyền quản trị và ghi lại tất cả các lần đăng nhập không thành công vào cơ sở dữ liệu và gửi nhật ký qua email cho bạn.

4 hữu ích 2 bình luận chia sẻ

answer

3

Mọi người đang nói về điều này như thể họ có thể bị tấn công qua internet. Như đã nêu, việc hạn chế các nỗ lực khiến không thể bẻ khóa mật khẩu qua Internet và không liên quan gì đến hàm băm.

Muối là phải có, nhưng độ phức tạp hoặc nhiều muối thậm chí không quan trọng. Chỉ riêng muối nào cũng có thể ngăn kẻ tấn công sử dụng bàn cầu vồng làm sẵn. Một muối duy nhất cho mỗi người dùng ngăn kẻ tấn công tạo một bảng cầu vồng mới để sử dụng chống lại toàn bộ cơ sở người dùng của bạn.

Bảo mật thực sự phát huy tác dụng khi toàn bộ cơ sở dữ liệu bị xâm phạm và sau đó tin tặc có thể thực hiện 100 triệu lần nhập mật khẩu mỗi giây đối với băm md5. SHA512 chậm hơn khoảng 10.000 lần. Một mật khẩu phức tạp với sức mạnh ngày nay vẫn có thể mất 100 năm để thực thi với md5 và sẽ lâu gấp 10.000 lần với SHA512. Các muối không ngăn chặn được sự tàn bạo vì chúng luôn phải được biết đến, điều này nếu kẻ tấn công tải xuống cơ sở dữ liệu của bạn, thì có thể hắn ta đã ở trong hệ thống của bạn.

3 hữu ích 0 bình luận chia sẻ

answer

1

MD5 bị lỗi do sự cố va chạm - hai mật khẩu khác nhau có thể tạo ra cùng một md-5.

Sha-1 sẽ rất an toàn cho việc này. Lý do bạn lưu trữ phiên bản sha-1 của mật khẩu là để bạn, người trao đổi không lưu trữ mật khẩu của người dùng trong hồ sơ, mà họ có thể đang sử dụng với máy chủ của người khác. Nếu không, nó tạo ra sự khác biệt gì?

Nếu tin tặc đánh cắp toàn bộ cơ sở dữ liệu không được mã hóa của bạn theo cách nào đó, điều duy nhất mà một mật khẩu mặn đã băm làm là ngăn không cho anh ta mạo danh người dùng để đăng nhập trong tương lai - tin tặc đã có dữ liệu.

Kẻ tấn công có lợi gì khi có giá trị băm, nếu những gì người dùng của bạn nhập vào là một mật khẩu thuần túy?

Và ngay cả khi tin tặc với công nghệ tương lai có thể tạo ra một triệu khóa sha-1 mỗi giây cho một cuộc tấn công bạo lực, liệu máy chủ của bạn có xử lý một triệu đăng nhập mỗi giây để tin tặc kiểm tra khóa của anh ta không? Đó là nếu bạn đang để tin tặc cố gắng đăng nhập bằng muối sha-1 thay vì mật khẩu như đăng nhập thông thường.

Đặt cược tốt nhất là giới hạn các nỗ lực đăng nhập xấu ở một số hợp lý - ví dụ như 25, và sau đó cho người dùng thoát trong một hoặc hai phút. Và nếu số lần đăng nhập bady tích lũy đạt 250 trong vòng 24 giờ, hãy đóng quyền truy cập tài khoản và gửi email cho chủ sở hữu.

1 hữu ích 3 bình luận chia sẻ

answer

1

Dưới đây là so sánh giữa MD5 và SHA1. Bạn có thể có một ý tưởng rõ ràng về cái nào tốt hơn.

1 hữu ích 0 bình luận chia sẻ

answer

1

Sử dụng argon2i . Các argon2 chức năng mật khẩu băm đã giành Password Băm cạnh tranh.

Các lựa chọn hợp lý khác, nếu không sử dụng argon2 , là scrypt , bcrypt và PBKDF2 . Wikipedia có các trang cho các chức năng này:

  • //en.wikipedia.org/wiki/Argon2
  • //en.wikipedia.org/wiki/Scrypt
  • //en.wikipedia.org/wiki/Bcrypt
  • //en.wikipedia.org/wiki/PBKDF2

MD5, SHA1 và SHA256 là chức năng phân tích thông báo, không phải là hàm băm mật khẩu. Chúng không phù hợp cho mục đích này.

Việc chuyển từ MD5 sang SHA1 hoặc SHA512 sẽ không cải thiện được tính bảo mật của công trình. Tính toán hàm băm SHA256 hoặc SHA512 rất nhanh. Kẻ tấn công có phần cứng thông thường vẫn có thể thử hàng chục triệu [với một CPU] hoặc thậm chí hàng tỷ [với một GPU] băm mỗi giây. Các chức năng băm mật khẩu tốt bao gồm một yếu tố công việc để làm chậm các cuộc tấn công từ điển.

Đây là một gợi ý cho các lập trình viên PHP: đọc Câu hỏi thường gặp về PHP sau đó sử dụng password_hash [] .

1 hữu ích 0 bình luận chia sẻ

answer

0

Hãy giả định điểm tiếp theo: tin tặc đánh cắp cơ sở dữ liệu của chúng tôi bao gồm người dùng và mật khẩu [được mã hóa]. Và các hacker đã tạo một tài khoản giả với mật khẩu mà chúng biết.

MD5 yếu vì nó ngắn và phổ biến và thực tế mọi thế hệ băm không có mật khẩu đều là điểm yếu của một cuộc tấn công từ điển. Nhưng..

Vì vậy, giả sử rằng chúng tôi vẫn đang sử dụng MD5 với SALT. Tin tặc không biết SALT nhưng chúng biết mật khẩu của một người dùng cụ thể. Vì vậy, họ có thể kiểm tra: ????? 12345 đâu là mật khẩu biết và ????? là muối. Các tin tặc sớm hay muộn cũng có thể đoán được MUỐI.

Tuy nhiên, nếu chúng tôi sử dụng MD5 + SALT và chúng tôi đã áp dụng MD5, thì không có cách nào để khôi phục thông tin. Tuy nhiên, tôi nhắc lại, MD5 vẫn còn ngắn.

Ví dụ: giả sử mật khẩu của tôi là: 12345. SALT là BILLCLINTON

md5: 827ccb0eea8a706c4c34a16891f84e7b

md5 với băm: 56adb0f19ac0fb50194c312d49b15378

mD5 với mã băm trên md5: 28a03c0bc950decdd9ee362907d1798a Tôi đã cố gắng sử dụng các dịch vụ trực tuyến đó và tôi không tìm thấy dịch vụ nào có thể bẻ khóa nó. Và MD5 duy nhất của nó! [có thể như ngày hôm nay, nó sẽ có thể crack được vì tôi đã tạo md5 trực tuyến]

Nếu bạn muốn quá mức cần thiết thì SHA256 là quá đủ nếu nó được áp dụng với một muối và hai lần.

tldr MD5 [HASH + MD5 [password]] = ok nhưng ngắn gọn, SHA256 là quá đủ.

0 hữu ích 1 bình luận chia sẻ

answer

0

Mã hóa md5 là một trong những mã kém nhất, vì bạn phải quay mã và nó đã được giải mã. Tôi muốn giới thiệu cho bạn SHA256. Tôi đang lập trình lâu hơn một chút và đã có một trải nghiệm tốt. Dưới đây cũng sẽ là một mã hóa.

password_hash[] example using Argon2i The above example will output something similar to: Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0

0 hữu ích 0 bình luận chia sẻ

Chủ Đề