Mã hóa là quá trình dịch văn bản có thể đọc được thành các chuỗi byte vô nghĩa để chỉ người có khóa giải mã hoặc mã bí mật mới có thể đọc được. Quá trình này đóng một vai trò quan trọng trong việc bảo mật nội dung của bạn. Nó giúp mã hóa nội dung, xác minh nguồn gốc của tài liệu, chứng minh rằng nội dung không bị sửa đổi sau khi được gửi và đảm bảo rằng dữ liệu từ tài liệu được an toàn
Bài viết này giải thích cách Aspose. Words cho phép bạn mã hóa tài liệu và cách kiểm tra xem tài liệu có mã hóa hay không
Mã hóa bằng mật khẩu
Để mã hóa tài liệu, hãy sử dụng thuộc tính mật khẩu để cung cấp mật khẩu có chức năng như khóa mã hóa. Điều này sẽ sửa đổi nội dung tài liệu của bạn và làm cho nó không thể đọc được. Tài liệu được mã hóa sẽ yêu cầu nhập mật khẩu này trước khi có thể mở được
Bạn có thể tìm thuộc tính mật khẩu thích hợp cho định dạng được yêu cầu. Mỗi định dạng lưu tài liệu trong aspose. từ. mô-đun lưu có một lớp tương ứng chứa các tùy chọn lưu cho định dạng này. Ví dụ: thuộc tính mật khẩu trong lớp DocSaveOptions cho DOC hoặc thuộc tính mật khẩu trong lớp OoxmlSaveOptions cho DOCX, DOCM, DOTX, DOTM và FlatOpc
Lưu ý rằng chỉ một số định dạng tài liệu hỗ trợ mã hóa. Ví dụ: RTF không hỗ trợ mã hóa
Bảng bên dưới liệt kê các định dạng và thuật toán mã hóa được Aspose hỗ trợ. Từ ngữ
Định dạng Mã hóa được hỗ trợ trong khi tải Mã hóa được hỗ trợ trong khi lưu Mã hóa DOC, DOTXOR Mã hóa RC4 40-bitCryptoAPI Mã hóa RC4 Mã hóa RC4 [40-bit]DOCX, DOTX, DOCM, DOTM, FlatOPC, FlatOpcTemplate, FlatOpcMacroEnabled, FlatOpcTemplateMacroEnabledMã hóa tiêu chuẩn ECMA-376 Mã hóa nhanh nhẹn ECMA-376 Mã hóa tiêu chuẩn ECMA-376 [Ví dụ mã sau đây cho biết cách mã hóa tài liệu bằng mật khẩu
import aspose.words as aw
# Create a document.
doc = aw.Document[]
builder = aw.DocumentBuilder[doc]
builder.write["Hello world!"]
# DocSaveOptions only applies to Doc and Dot save formats.
options = aw.saving.DocSaveOptions[aw.SaveFormat.DOC];
// Set a password with which the document will be encrypted, and which will be required to open it.
options.password = "MyPassword"
doc.save[artifacts_dir + "DocSaveOptions.SaveAsDoc.doc", options]
Kiểm tra xem tài liệu có được mã hóa không
Trong một số trường hợp, bạn có thể có một tài liệu không thể đọc được và muốn đảm bảo rằng tài liệu đó được mã hóa và không bị hỏng hoặc nén
Để phát hiện xem tài liệu có được mã hóa hay không và có yêu cầu mật khẩu hay không, bạn có thể sử dụng thuộc tính is_encrypted của lớp FileFormatInfo. Thuộc tính này cũng sẽ cho phép bạn thực hiện một số hành động trước khi tải tài liệu, chẳng hạn như thông báo cho người dùng cung cấp mật khẩu
Ví dụ mã sau đây cho thấy cách phát hiện mã hóa tài liệu
import aspose.words as aw
# Create a document.
doc = aw.Document[]
saveOptions = aw.saving.OdtSaveOptions[aw.SaveFormat.ODT]
saveOptions.password = "MyPassword"
doc.Save[artifacts_dir + "File.DetectDocumentEncryption.odt", saveOptions]
# Create a FileFormatInfo object for this document.
info = aw.FileFormatUtil.detect_file_format[artifacts_dir + "File.DetectDocumentEncryption.odt"]
# Verify the encryption status of our document.
self.assertTrue[info.is_encrypted]
Mở tài liệu có hoặc không có mật khẩu
Khi chúng tôi chắc chắn rằng một tài liệu được mã hóa, chúng tôi có thể thử mở tài liệu này mà không cần mật khẩu, điều này sẽ dẫn đến một ngoại lệ
Ví dụ mã sau đây cho biết cách thử mở tài liệu được mã hóa mà không cần mật khẩu
import aspose.words as aw
# Create a document.
doc = aw.Document[]
builder = aw.DocumentBuilder[doc]
builder.write["Hello world!"]
# OoxmlSaveOptions only applies to Docx, Docm, Dotx, Dotm, or FlatOpc formats.
options = aw.saving.OoxmlSaveOptions[aw.SaveFormat.DOCX]
# Set a password with which the document will be encrypted, and which will be required to open it.
options.password = "MyPassword"
doc.Save[artifacts_dir + "OoxmlSaveOptions.SaveAsDocx.docx", options]
# We will not be able to open this document with Microsoft Word or
# Aspose.Words without providing the correct password.
# The following line will throw an exception.
doc = aw.Document[artifacts_dir + "OoxmlSaveOptions.Password.docx"]]
Sau khi chúng tôi thấy rằng không thể mở tài liệu được mã hóa nếu không có mật khẩu, chúng tôi có thể thử mở tài liệu đó bằng cách nhập mật khẩu
Mô-đun này triển khai giao diện cho thủ tục crypt[3], là hàm băm một chiều dựa trên thuật toán DES đã sửa đổi; . Các cách sử dụng có thể bao gồm lưu trữ mật khẩu băm để bạn có thể kiểm tra mật khẩu mà không lưu trữ mật khẩu thực hoặc cố gắng bẻ khóa mật khẩu Unix bằng từ điển
Lưu ý rằng hành vi của mô-đun này phụ thuộc vào việc triển khai thực tế quy trình crypt[3] trong hệ thống đang chạy. Do đó, bất kỳ tiện ích mở rộng nào có sẵn trong quá trình triển khai hiện tại cũng sẽ có sẵn trên mô-đun này
Unix, không phải VxWorks
không phải Emscripten, không phải WASI
Mô-đun này không hoạt động hoặc không khả dụng trên nền tảng WebAssembly wasm32-emscripten
và wasm32-wasi
. Xem để biết thêm thông tin
Phương pháp băm
Mới trong phiên bản 3. 3
Mô-đun xác định danh sách các phương thức băm [không phải tất cả các phương thức đều có sẵn trên tất cả các nền tảng]
mật mã. METHOD_SHA512Phương thức Định dạng mật mã mô-đun với muối 16 ký tự và hàm băm 86 ký tự dựa trên hàm băm SHA-512. Đây là phương pháp mạnh nhất
mật mã. METHOD_SHA256Một phương thức Định dạng mật mã mô-đun khác với muối 16 ký tự và hàm băm 43 ký tự dựa trên hàm băm SHA-256
Một phương thức Định dạng mật mã mô-đun khác với muối 22 ký tự và hàm băm 31 ký tự dựa trên mật mã Blowfish
Mới trong phiên bản 3. 7
mật mã. METHOD_MD5Một phương thức Định dạng mật mã mô-đun khác với muối 8 ký tự và hàm băm 22 ký tự dựa trên hàm băm MD5
mật mã. METHOD_CRYPTPhương pháp truyền thống với muối 2 ký tự và hàm băm 13 ký tự. Đây là phương pháp yếu nhất
Thuộc tính mô-đun
Mới trong phiên bản 3. 3
mật mã. phương phápDanh sách các thuật toán băm mật khẩu có sẵn, dưới dạng đối tượng crypt.METHOD_*
. Danh sách này được sắp xếp từ mạnh nhất đến yếu nhất
Chức năng mô-đun
Mô-đun xác định các chức năng sau
mật mã. crypt[word , salt=None]từ thường sẽ là mật khẩu của người dùng khi được nhập tại dấu nhắc hoặc trong giao diện đồ họa. Muối tùy chọn là một chuỗi như được trả về từ , một trong các giá trị crypt.METHOD_*
[mặc dù không phải tất cả đều có sẵn trên tất cả các nền tảng] hoặc mật khẩu được mã hóa đầy đủ bao gồm cả muối, như được trả về bởi hàm này. Nếu muối không được cung cấp, phương pháp mạnh nhất hiện có sẽ được sử dụng
Việc kiểm tra mật khẩu thường được thực hiện bằng cách chuyển mật khẩu văn bản thuần dưới dạng từ và kết quả đầy đủ của cuộc gọi trước, kết quả này phải giống với kết quả của cuộc gọi này
muối [có thể là một chuỗi 2 hoặc 16 ký tự ngẫu nhiên, có thể có tiền tố là
import crypt from hmac import compare_digest as compare_hash hashed = crypt.crypt[plaintext] if not compare_hash[hashed, crypt.crypt[plaintext, hashed]]: raise ValueError["hashed version doesn't validate against original"]4 để chỉ phương thức] sẽ được sử dụng để gây nhiễu thuật toán mã hóa. Các ký tự trong muối phải thuộc bộ
import crypt from hmac import compare_digest as compare_hash hashed = crypt.crypt[plaintext] if not compare_hash[hashed, crypt.crypt[plaintext, hashed]]: raise ValueError["hashed version doesn't validate against original"]5, ngoại trừ Định dạng mật mã mô-đun có tiền tố là
import crypt from hmac import compare_digest as compare_hash hashed = crypt.crypt[plaintext] if not compare_hash[hashed, crypt.crypt[plaintext, hashed]]: raise ValueError["hashed version doesn't validate against original"]4
Trả về mật khẩu đã băm dưới dạng một chuỗi, sẽ bao gồm các ký tự từ cùng một bảng chữ cái với muối
Vì một số tiện ích mở rộng crypt[3] cho phép các giá trị khác nhau, với các kích thước khác nhau trong muối, nên sử dụng mật khẩu được mã hóa đầy đủ làm muối khi kiểm tra mật khẩu
Đã thay đổi trong phiên bản 3. 3. Chấp nhận giá trị crypt.METHOD_*
ngoài chuỗi cho muối.
Trả về một loại muối được tạo ngẫu nhiên của phương pháp đã chỉ định. Nếu không có phương pháp nào được đưa ra, phương pháp mạnh nhất có sẵn trong được sử dụng
Giá trị trả về là một chuỗi phù hợp để chuyển làm đối số muối cho
round chỉ định số lượng round cho crypt
0, crypt
1 và crypt
2. Đối với crypt
0 và crypt
1, nó phải là một số nguyên trong khoảng từ crypt
5 đến crypt
6, mặc định là crypt
7. Đối với crypt
2, nó phải là lũy thừa hai trong khoảng từ crypt
9 [24] đến crypt
0 [231], giá trị mặc định là crypt
1 [212]
Mới trong phiên bản 3. 3
Đã thay đổi trong phiên bản 3. 7. Đã thêm tham số vòng.
ví dụ
Một ví dụ đơn giản minh họa cách sử dụng thông thường [cần có thao tác so sánh thời gian không đổi để hạn chế tiếp xúc với các cuộc tấn công theo thời gian. thích hợp cho mục đích này]
import pwd import crypt import getpass from hmac import compare_digest as compare_hash def login[]: username = input['Python login: '] cryptedpasswd = pwd.getpwnam[username][1] if cryptedpasswd: if cryptedpasswd == 'x' or cryptedpasswd == '*': raise ValueError['no support for shadow passwords'] cleartext = getpass.getpass[] return compare_hash[crypt.crypt[cleartext, cryptedpasswd], cryptedpasswd] else: return True
Để tạo hàm băm của mật khẩu bằng phương pháp mạnh nhất hiện có và kiểm tra mật khẩu đó với bản gốc