เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 30939
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ทำตามกระทู้นี้ในการเข้ารหัส viewtopic.php?t=115315

เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

csv สามารถทำงานได้ แค่ pdf มี error
Traceback (most recent call last):
File "C:/Users/USER/PycharmProjects/etax/venv/set_gpg.py", line 17, in <module>
message = pgpy.PGPMessage.new(data, file=True)
File "C:\Users\USER\PycharmProjects\etax\venv\lib\site-packages\pgpy\pgp.py", line 1142, in new
if file and os.path.isfile(message):
File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\genericpath.py", line 30, in isfile
st = os.stat(path)
ValueError: stat: embedded null character in path
MindPHP Assistant

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MindPHP Assistant »

ดูเหมือนว่าข้อผิดพลาดเกิดจากการใช้ฟังก์ชัน `os.path.isfile()` กับตัวแปร `message` ซึ่งมีค่าที่ไม่ถูกต้อง เนื่องจากมี null character ฝังอยู่ในเส้นทางที่ระบุ

จาก Traceback ที่คุณให้มา ข้อความที่คุณพยายามจะเข้ารหัสเป็น PDF และดูเหมือนว่าการใช้งานฟังก์ชัน `pgpy.PGPMessage.new()` ผิดพลาดเมื่อพยายามสร้างข้อความ PGP จากข้อมูลไฟล์ PDF

ให้ตรวจสอบวิธีการอ่านข้อมูลจากไฟล์ PDF ก่อนว่าทำได้ถูกต้องหรือไม่ โดยปกติแล้ว คุณควรเปิดไฟล์ในโหมด binary ('rb') แทนที่จะเป็นโหมด text ('r') เนื่องจาก PDF เป็นไฟล์ไบนารี

นี่คือตัวอย่างคร่าว ๆ ในการใช้ PGP ในการเข้ารหัสไฟล์ PDF:

โค้ด: เลือกทั้งหมด

python
import pgpy

# ตั้งค่าที่อยู่ของไฟล์
pdf_file_path = "path/to/your/file.pdf"

# อ่านไฟล์ PDF ในโหมดไบนารี
with open(pdf_file_path, "rb") as pdf_file:
    data = pdf_file.read()

# สร้าง PGP message จากข้อมูลที่อ่านมา
message = pgpy.PGPMessage.new(data, file=True)

# โหลด public key ที่จะใช้เข้ารหัส
public_key, _ = pgpy.PGPKey.from_file("path/to/public_key.asc")

# เข้ารหัสข้อความด้วย public key
encrypted_message = public_key.encrypt(message)

# บันทึกข้อความที่เข้ารหัสลงไฟล์
with open("path/to/encrypted_file.pgp", "w") as enc_file:
    enc_file.write(str(encrypted_message))
โปรดตรวจสอบว่า:

1. เส้นทางไฟล์ถูกต้อง
2. Public key ถูกต้องและนำเข้ามาถูกต้อง
3. การเปิดไฟล์ PDF นั้นเปิดในโหมดไบนารี ('rb')

ลองดูว่าโค้ดนี้ช่วยแก้ปัญหาได้หรือไม่ หากยังมีปัญหาอยู่ โปรดให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้โค้ดว่าทำงานอย่างไร
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 30939
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

code ที่ให้มาใช้ได้กับ csv ด้วยมั้ย
MindPHP Assistant

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MindPHP Assistant »

ผมไม่ทราบว่าคุณหมายถึงโค้ดไหน เนื่องจากไม่มีโค้ดที่ให้มาในคำถามของคุณ ถ้าคุณมีโค้ดเฉพาะที่อยากให้ตรวจสอบหรือมีคำถามเกี่ยวกับการใช้โค้ดกับไฟล์ CSV สามารถโพสต์โค้ดหรือคำถามนั้นมาได้เลยครับ แล้วผมจะช่วยดูและให้คำแนะนำเพิ่มเติมให้ครับ
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 30939
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

โค้ด: เลือกทั้งหมด

python
import pgpy

# ตั้งค่าที่อยู่ของไฟล์
pdf_file_path = "path/to/your/file.pdf"

# อ่านไฟล์ PDF ในโหมดไบนารี
with open(pdf_file_path, "rb") as pdf_file:
    data = pdf_file.read()

# สร้าง PGP message จากข้อมูลที่อ่านมา
message = pgpy.PGPMessage.new(data, file=True)

# โหลด public key ที่จะใช้เข้ารหัส
public_key, _ = pgpy.PGPKey.from_file("path/to/public_key.asc")

# เข้ารหัสข้อความด้วย public key
encrypted_message = public_key.encrypt(message)

# บันทึกข้อความที่เข้ารหัสลงไฟล์
with open("path/to/encrypted_file.pgp", "w") as enc_file:
    enc_file.write(str(encrypted_message))
code นี้ใช้ได้กับ csv ด้วยมั้ย
MindPHP Assistant

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MindPHP Assistant »

โค้ดที่คุณมีนั้นสามารถใช้กับไฟล์ CSV ได้เช่นกัน โดยหลักการคือการอ่านไฟล์ในโหมดไบนารีแล้วเข้ารหัสข้อมูลด้วย PGP public key ก่อนจะบันทึกออกมาเป็นไฟล์ `.pgp` เหมือนกับไฟล์ PDF

สิ่งที่ต้องเปลี่ยนมีเพียงแค่ที่อยู่ของไฟล์ในตัวแปร `pdf_file_path` (ซึ่งคุณอาจเปลี่ยนชื่อเป็น `file_path` เพื่อให้สื่อความหมายว่าใช้ได้กับทุกไฟล์) ให้ชี้ไปยังไฟล์ CSV แทนไฟล์ PDF ดังนี้:

โค้ด: เลือกทั้งหมด

python
import pgpy

# ตั้งค่าที่อยู่ของไฟล์
file_path = "path/to/your/file.csv"  # เปลี่ยนจาก PDF เป็น CSV

# อ่านไฟล์ในโหมดไบนารี
with open(file_path, "rb") as file:
    data = file.read()

# สร้าง PGP message จากข้อมูลที่อ่านมา
message = pgpy.PGPMessage.new(data, file=True)

# โหลด public key ที่จะใช้เข้ารหัส
public_key, _ = pgpy.PGPKey.from_file("path/to/public_key.asc")

# เข้ารหัสข้อความด้วย public key
encrypted_message = public_key.encrypt(message)

# บันทึกข้อความที่เข้ารหัสลงไฟล์
with open("path/to/encrypted_file.pgp", "w") as enc_file:
    enc_file.write(str(encrypted_message))
เพียงเท่านี้คุณก็สามารถใช้โค้ดนี้เพื่อเข้ารหัสไฟล์ CSV ได้แล้วครับ
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 30939
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โค้ด: เลือกทั้งหมด

for filepath in files_to_encrypt:
    try:
        # อ่านไฟล์ในโหมดไบนารี
        with open(filepath, "rb") as file:
            data = file.read()

        # สร้าง PGP message จากข้อมูลที่อ่านมา
        message = pgpy.PGPMessage.new(data, file=True)

        # โหลด public key ที่จะใช้เข้ารหัส
        public_key, _ = pgpy.PGPKey.from_file(public_key_path)

        # เข้ารหัสข้อความด้วย public key
        encrypted_message = public_key.encrypt(message)
        output_path = f"{filepath}.pgp"
        # บันทึกข้อความที่เข้ารหัสลงไฟล์
        with open(output_path, "w") as enc_file:
            enc_file.write(str(encrypted_message))

        encrypted_files.append(output_path)
        print(f" เข้ารหัส: {output_path}")
    except FileNotFoundError:
        print(f"ไม่พบไฟล์: {filepath}")
    except Exception as e:
        print(f"เกิดข้อผิดพลาดในการประมวลผลไฟล์ {filepath}: {e}")
Traceback (most recent call last):
File "C:/Users/USER/PycharmProjects/etax/venv/set_gpg.py", line 17, in <module>
message = pgpy.PGPMessage.new(data, file=True)
File "C:\Users\USER\PycharmProjects\etax\venv\lib\site-packages\pgpy\pgp.py", line 1142, in new
if file and os.path.isfile(message):
File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\genericpath.py", line 30, in isfile
st = os.stat(path)
ValueError: stat: embedded null character in path
MindPHP Assistant

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MindPHP Assistant »

ปัญหานี้เกิดจากการที่ฟังก์ชัน `pgpy.PGPMessage.new` เมื่อถูกเรียกด้วย `file=True` จะคาดหวังให้ `data` เป็น path ของไฟล์ไม่ใช่ข้อมูลไบนารีที่อ่านมาจากไฟล์โดยตรง ดังนั้นจึงเกิดข้อผิดพลาดเนื่องจากมีการส่งข้อมูลไบนารีแทนที่จะเป็น path ของไฟล์เข้าไป

คุณสามารถแก้ไขได้โดยไม่ต้องใช้ `file=True` เพราะคุณได้อ่านข้อมูลไบนารีมาแล้ว ดังนี้:

โค้ด: เลือกทั้งหมด

python
for filepath in files_to_encrypt:
    try:
        # อ่านไฟล์ในโหมดไบนารี
        with open(filepath, "rb") as file:
            data = file.read()
        
        # สร้าง PGP message จากข้อมูลที่อ่านมา
        message = pgpy.PGPMessage.new(data)
        
        # โหลด public key ที่จะใช้เข้ารหัส
        public_key, _ = pgpy.PGPKey.from_file(public_key_path)
        
        # เข้ารหัสข้อความด้วย public key
        encrypted_message = public_key.encrypt(message)
        
        output_path = f"{filepath}.pgp"
        
        # บันทึกข้อความที่เข้ารหัสลงไฟล์
        with open(output_path, "w") as enc_file:
            enc_file.write(str(encrypted_message))
        
        encrypted_files.append(output_path)
        print(f"เข้ารหัส: {output_path}")
    
    except FileNotFoundError:
        print(f"ไม่พบไฟล์: {filepath}")
    except Exception as e:
        print(f"เกิดข้อผิดพลาดในการประมวลผลไฟล์ {filepath}: {e}")
การเปลี่ยนแปลงที่สำคัญคือการลบ `file=True` ออกจากบรรทัด `message = pgpy.PGPMessage.new(data)`.
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 30939
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: เข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP มี error แก้ยังไง

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ใช้งานได้แล้ว
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 4