<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách mã hóa và giải mã file PDF bằng Python</title>
<meta name="description" content="Cách mã hóa và giải mã file PDF bằng Python - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách mã hóa và giải mã file PDF bằng Python">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;cach-ma-hoa-va-giai-ma-file-pdf-bang-python-6714.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-ma-hoa-va-giai-ma-file-pdf-bang-python-6714.html">
<link rel="shortcut icon" href="https://www.nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-ma-hoa-va-giai-ma-file-pdf-bang-python-6714.html">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://www.nguoicodonvn2008.info/">https://www.nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Cách mã hóa và giải mã file PDF bằng Python</h1>
		<ul class="list-inline">
			<li>Chủ nhật - 12/02/2023 23:56</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Cách mã hóa và giải mã file PDF bằng Python" src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-4.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p style="text-align: justify;"><strong>Python</strong> có thể giúp bạn mã hóa và giải mã file PDF dễ dàng. Dưới đây là chi tiết <strong>cách mã hóa và giải mã file PDF bằng Python</strong>.</p>

<p style="text-align:center"><img alt="Lập trình Python" class="lazy loaded lightbox" data-i="0" data-src="https://st.quantrimang.com/photos/image/2023/02/11/Python-PDF-7.jpg" data-was-processed="true" height="340" src="https://st.quantrimang.com/photos/image/2023/02/11/Python-PDF-7.jpg" style="height: 340px; width: 650px;" width="650" /></p>

<p style="text-align: justify;">Vấn nạn bị xâm phạm các tập tin riêng tư khá phổ biến ngày nay. Vì thế, để đảm bảo chỉ những người được phép mới có thể truy cập nội dung file, bạn có thể mã hóa chúng trước khi gửi đi.</p>

<h2 style="text-align: justify;">Thiết lập môi trường</h2>

<p style="text-align: justify;">Để làm theo các bước dưới đây, bạn cần có kiến thức cơ bản về Python.</p>

<p style="text-align: justify;">Trên một terminal Mac hoặc giao diện dòng lệnh Windows, chạy lệnh sau để cài thư viện PyMuPDF:</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language- language-none prettyprint" id="pre0">
<code>pip install PyMuPDF</code></pre>

<p style="text-align: justify;">Thư viện này sẽ giúp bạn mở và chỉnh sửa file PDF.</p>

<p style="text-align:center"><img alt="Giải mã file PDF" class="lazy lightbox loaded" data-adbro-processed="true" data-i="1" data-src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-1.jpg" data-was-processed="true" height="347" src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-1.jpg" style="height: 347px; width: 650px;" width="650" /></p>

<p style="text-align: justify;">Khi đã hoàn tất cài đặt PyMuPDF, bạn đã sẵn sàng lập trình.</p>

<h2 style="text-align: justify;">Nhập Fitz Module</h2>

<p style="text-align: justify;">Nhập mô đun Fitz của thư viện PyMuPDF. Điều này sẽ cho phép bạn gọi và dùng các hàm mà nó hỗ trợ.</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language- language-none prettyprint" id="pre1">
<code>Import fitz</code></pre>

<p style="text-align: justify;">Bạn sẽ dùng fitz để mở, mã hóa, giải mã và lưu PDF.</p>

<h2 style="text-align: justify;">Kiểm tra mã hóa của file PDF</h2>

<p style="text-align: justify;">Tạo một hàm kiểm tra mức độ mã hóa của PDF và trả về một giá trị boolean.</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language-python prettyprint hljs" id="pre2" style="text-align: justify;">
<span class="hljs-keyword">def</span> <span class="hljs-title function_">pdf_is_encrypted</span>(<span class="hljs-params">file</span>):
    pdf = fitz.Document(file)
    <span class="hljs-keyword">return</span> pdf.isEncrypted</pre>

<p style="text-align: justify;">Bạn sẽ dùng hàm này sau đó, để giúp chương trình tự động quyết định xem mã hóa hay giải mã PDF nhập vào.</p>

<h2 style="text-align: justify;">Mã hóa PDF</h2>

<p style="text-align: justify;">Tạo một hàm để mã hóa PDF đầu vào. Hàm này cho bạn biết PDF đã được mã hóa hay chưa. Nếu chưa, nó sẽ mã hóa file bằng thuật toán AES-256. Đây là thuật toán mã hóa mạnh nhất mà fitz cung cấp. Cuối cùng, nó sẽ lưu PDF được mã hóa.</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language-python prettyprint hljs" id="pre3" style="text-align: justify;">
<span class="hljs-keyword">def</span> <span class="hljs-title function_">encrypt_pdf_file</span>(<span class="hljs-params">pdf, password, outfile, file</span>):
    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pdf_is_encrypted(file):
        perm = <span class="hljs-built_in">int</span>(
            <span class="hljs-comment"># Ensure everyone with the PDF</span>
            <span class="hljs-comment"># can access it</span>
            fitz.PDF_PERM_ACCESSIBILITY 
            | fitz.PDF_PERM_PRINT <span class="hljs-comment"># permits printing</span>
            | fitz.PDF_PERM_COPY <span class="hljs-comment"># permits copying</span>
            | fitz.PDF_PERM_ANNOTATE <span class="hljs-comment"># permits annotations</span>
        )

        <span class="hljs-comment"># eEncryption algorithm</span>
        encrypt_meth = fitz.PDF_ENCRYPT_AES_256 

        pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
                 permissions=perm)

        <span class="hljs-keyword">if</span> pdf.save:
            <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;PDF encrypted&quot;</span>)</pre>

<p style="text-align: justify;">Hàm này lưu PDF được mã hóa vào đường dẫn file bạn chuyển đi trong đối số tệp ngoài.</p>

<p style="text-align:center"><img alt="Lưu file PDF đã mã hóa" class="lazy lightbox loaded" data-i="2" data-src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-3.jpg" data-was-processed="true" height="344" src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-3.jpg" style="height: 344px; width: 650px;" width="650" /></p>

<h2 style="text-align: justify;">Giải mã PDF</h2>

<p style="text-align: justify;">Tạo một hàm giải mã. Hàm này đầu tiên sẽ kiểm tra xem file nhập vào có được mã hóa hay không. Nếu được mã hóa, nó sẽ nhắc người dùng nhập mật khẩu. Sau đó, nó sẽ thử mở PDF bằng mật khẩu được cung cấp. Nếu password đúng, fitz sẽ giải mã PDF. Sau đó, nó sẽ lưu nội dung của PDF được giải mã vào file PDF chưa được bảo vệ.</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language-python prettyprint hljs" id="pre4" style="text-align: justify;">
<span class="hljs-keyword">def</span> <span class="hljs-title function_">decrypt_pdf</span>(<span class="hljs-params">file</span>):
    <span class="hljs-keyword">if</span> pdf_is_encrypted(file):
        password = <span class="hljs-built_in">input</span>(<span class="hljs-string">&#039;Enter pdf password : &#039;</span>)
        pdf = fitz.<span class="hljs-built_in">open</span>(file)

        <span class="hljs-keyword">if</span> pdf.authenticate(password):
            pdf.save(<span class="hljs-string">&#039;decrypted.pdf&#039;</span>)

            <span class="hljs-keyword">if</span> pdf.save:
                <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;PDF decrypted&quot;</span>)
        <span class="hljs-keyword">else</span>:
            <span class="hljs-built_in">print</span>(<span class="hljs-string">&#039;Incorrect Password&#039;</span>)</pre>

<p style="text-align: justify;">Code này lưu PDF chưa được bảo vệ vào thư mục làm việc hiện tại.</p>

<p style="text-align:center"><img alt="Lưu file PDF " class="lazy lightbox loaded" data-i="3" data-src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-4.jpg" data-was-processed="true" height="343" src="https://st.quantrimang.com/photos/image/2023/02/11/python-giai-ma-pdf-4.jpg" style="height: 343px; width: 650px;" width="650" /></p>

<p style="text-align: justify;">Sau khi giải mã file<strong> protected.pdf </strong>thành công, nó sẽ được lưu dưới dạng <strong>decrypted.pdf</strong>.</p>

<h2 style="text-align: justify;">Kiểm soát luồng chương trình</h2>

<p style="text-align: justify;">Tạo một hàm chính sẽ kiểm soát luồng chương trình. Nó sẽ lưu đường dẫn của PDF nhập vào, gọi hàm mã hóa, giải mã và chuyển các tham số nhập vào.</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language-python prettyprint hljs" id="pre5" style="text-align: justify;">
<span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():
    <span class="hljs-comment"># replace the file path with either that of</span>
    <span class="hljs-comment"># the pdf to be encrypted or decrypted </span>
    file = <span class="hljs-string">&#039;sample.pdf&#039;</span>
    pdf = fitz.<span class="hljs-built_in">open</span>(file)
    password = <span class="hljs-string">&#039;pass123&#039;</span>
    encrypt_pdf_file(pdf, password, <span class="hljs-string">&#039;protected.pdf&#039;</span>, file)
    decrypt_pdf(pdf)</pre>

<p style="text-align: justify;">Để thay đổi tên của file PDF được mã hóa, thay thế <strong>protected.pdf</strong> bằng tên bạn muốn nhưng nhớ giữ nguyên định dạng .pdf.</p>

<h2 style="text-align: justify;">Chạy phương thức chính</h2>

<p style="text-align: justify;">Đảm bảo phương thức chính (main) chạy trước:</p>

<div class="codebar" style="text-align: justify;"></div>

<pre class="language-python prettyprint hljs" id="pre6" style="text-align: justify;">
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">&#039;__main__&#039;</span>:
    main()</pre>

<p style="text-align: justify;">Code này kiểm tra xem tập lệnh có đang được chạy dưới dạng chương trình chính chứ không phải mô-đun đã nhập hay không. Nếu là chương trình chính, nó sẽ gọi hàm main.</p>

<p style="text-align: justify;">Tạo chương trình mã hóa/giải mã PDF trong Python là một dự án thú vị nhưng thử thách. Nó giúp bạn rèn luyện kỹ năng Python và làm chủ kỹ năng xử lý tập tin bằng ngôn ngữ này.</p>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-ma-hoa-va-giai-ma-file-pdf-bang-python-6714.html" title="Cách mã hóa và giải mã file PDF bằng Python">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-ma-hoa-va-giai-ma-file-pdf-bang-python-6714.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://www.nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://www.nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<script src="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://www.nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://www.nguoicodonvn2008.info",
            "logo": "https://www.nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>