Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle có bất kỳ hàm băm tích hợp nào không?

Có:băm và mã hóa (có liên quan nhưng không hoàn toàn giống nhau) đều được thực hiện thông qua gói SYS DBMS_CRYPTO.

Băm SHA-1 đơn giản

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_SH1 );

Băm MD5 đơn giản

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_MD5 );

Tổng quan về dbms_crypto.hash ()

Hàm hash () được nạp chồng để chấp nhận các kiểu sau:RAW, BLOB và CLOB. Theo chuyển đổi dữ liệu đơn giản đối với các loại đầu vào thô được chấp nhận là RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Tất cả các loại dữ liệu khác (DATE, TIMESTAMP, v.v.) không được đề cập trong chuyển đổi RAW / RAW ngầm định, BLOB và CLOB sẽ phải được chuyển qua TO_CHAR () trước tiên.

Cần lưu ý rằng dbms_crypto.hash () hỗ trợ các thuật toán băm sau:

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

Mật khẩu:Chỉ trong trường hợp

Nếu bạn đang lưu trữ mật khẩu, tôi khuyên bạn nên sử dụng băm lưu trữ mật khẩu (bcrypt, PBKDF2 hoặc scrypt) thay vì băm mật mã (md5, sha-1, v.v.). Sự khác biệt là các hàm băm lưu trữ mật khẩu có nghĩa là mất thời gian để phá vỡ trong khi các hàm băm mật mã được thực hiện nhanh chóng. Khi tấn công danh sách mật khẩu của hệ thống thông qua brute force, nó sẽ đòi hỏi nhiều thời gian hơn khi cố gắng phá vỡ một giá trị mặn được chuyển qua một thuật toán mật mã. Hãy xem xét rằng việc sử dụng băm mật khẩu trên một giá trị có thể mất ~ 100ms (không nhiều đối với một lần đăng nhập xác thực), nhưng rất chậm đối với một lực lượng thô bạo (hàng triệu / tỷ lần thử cho mỗi mật khẩu) trên toàn bộ danh sách mật khẩu của bạn.

Oracle ghét mật khẩu băm

Đối với giá trị của nó, tôi không biết bất kỳ gói nào từ Oracle cung cấp hỗ trợ băm mật khẩu. Tuy nhiên, bạn có thể thực hiện điều này bằng cách sử dụng ' loadjava 'và đặt một triển khai bcrypt Java trong JVM chạy trong đó RDBMS của Oracle. Sau đó, bạn có thể sử dụng PL / SQL wrapper để gọi lớp Java của bạn có triển khai bcrypt. Nếu bạn đang sử dụng bậc trung gian, bạn có thể sử dụng nhiều tùy chọn khác có sẵn cho bạn bằng ngôn ngữ đó (.NET, PHP, Perl, Ruby, Python, Java, v.v.) và bỏ qua việc cố gắng sử dụng 'loadjava'.

Ý tôi là mã hóa không phải mã băm!

Trong trường hợp băm bạn cần không được dbms_crypto.hash () bao gồm, bạn có thể đang tìm kiếm mã hóa qua dbms_crypto.encrypt, cách này hoạt động rất tương tự ngoại trừ nó có các loại sau:

  • ENCRYPT_DES
  • ENCRYPT_3DES_2KEY
  • ENCRYPT_3DES
  • ENCRYPT_AES
  • ENCRYPT_PBE_MD5DES
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

Đây là toàn bộ tài liệu 11gR2 về DBMS_CRYPTO . Tất cả các phiên bản khác có sẵn trên tahiti.oracle.com . Chỉ cần nhấp vào phiên bản của bạn và sau đó tìm kiếm 'dbms_crypto'.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính trung bình danh sách TIMESTAMP (6) VỚI Múi giờ

  2. Sự cố khi chuyển dự án .NET từ không được quản lý sang tổ hợp ODP.NET được quản lý

  3. Nhận AbstractMethodError khi tạo kết nối với cơ sở dữ liệu Oracle9 với máy chủ Tomcat 8

  4. Tối ưu hóa truy vấn SELECT chạy chậm trên Oracle chạy nhanh trên SQL Server

  5. Oracle JDBC ojdbc6 Jar làm phụ thuộc Maven