วิธีถ่ายโอนไฟล์ผ่านปากกาและกระดาษพร้อมการแก้ไขข้อผิดพลาด


22

ฉันกำลังมองหาวิธีถ่ายโอนไฟล์โดยใช้ปากกาและกระดาษเท่านั้น

มันค่อนข้างคล้ายกับpaperbakยกเว้นความหนาแน่นที่ฉันกำลังมองหานั้นต่ำกว่ามากและฉันไม่ต้องการใช้เครื่องพิมพ์หรือสแกนเนอร์

เห็นได้ชัดว่าคำตอบแรกคือการเข้ารหัสBase64 แต่การเขียนและอ่านตัวอักษรจำนวนมากเช่นนี้จะส่งผลให้เกิดข้อผิดพลาด สำหรับวัตถุประสงค์ของฉันข้อผิดพลาดใด ๆ ที่ไม่สามารถยอมรับได้

คำตอบที่สองอาจเป็นรหัสแก้ไขข้อผิดพลาด Reed-Solomon (เช่นใช้rsbep ) อย่างไรก็ตามนี่ก็เป็นปัญหาด้วยเนื่องจากจากความเข้าใจของฉันรหัส Reed-Solomon ไม่ได้แก้ไขข้อผิดพลาดการแทรก / การลบซึ่งน่าจะมีโอกาสมากกว่าข้อผิดพลาดการแทนที่ในกรณีนี้

มีโปรแกรมใดบ้างที่จะเข้ารหัส / ถอดรหัสไฟล์ที่มีข้อผิดพลาดเกี่ยวกับการใส่ / ลบทราบการแก้ไขรหัส? ควรทำงานบน Windows, Linux และ Mac OS X

เห็นได้ชัดว่าการแก้ปัญหาอื่น ๆ สำหรับปัญหาทั่วไปยินดีต้อนรับ


คุณคาดหวังข้อผิดพลาดในการเขียนหรือเพียงแค่อ่าน?
Christian Mann

ฉันคาดหวังข้อผิดพลาดทั้งสองอย่าง แต่ฉันก็คาดหวังว่ามันจะเท่ากัน ...
Jeremy Salwen

โอ้ขอโทษ. ฉันอ่านผิดและคิดว่าคุณกำลังพิมพ์ คุณต้องการเขียนด้วยมือหรือไม่
Christian Mann

3
ฉันสามารถใช้ปากกาได้กี่สี :)
Der Hochstapler

1
มีเพียงปากกาสีเดียวไม่เช่นนั้นการถอดเสียงมันจะยากเกินไป ฉันกำลังส่งข้อความที่ถูกบีบอัดเซ็นชื่อเข้ารหัสดังนั้นถ้าสมมติว่ามีอัตราซ้ำซ้อนถึง 50% จำนวนการเขียนทั้งหมดจะน้อยกว่า 1.5 เท่าเท่ากับการเขียนข้อความต้นฉบับจริง ๆ (เมื่อคุณคำนึงถึงการบีบอัด ) อย่างไรก็ตามมีปัญหาที่การคัดลอกอักขระแบบสุ่มนั้นยากกว่าการคัดลอกข้อความภาษาอังกฤษ ดังนั้นเพื่อตอบคำถามของคุณแน่นอนเฉพาะในช่วงสอง kb เท่านั้น
Jeremy Salwen

คำตอบ:


4

ฉันสงสัยว่าotherwise transcribing it will be too difficultจะเป็นปัญหาหรือไม่

สมมติว่าคุณมีสีแดงเขียวน้ำเงินและดำ คุณสามารถเขียนสคริปต์ที่เปลี่ยนข้อมูลของคุณเป็นชุดของตัวอักษรRGBYเช่น: RGBYGBRYBGBYRYYBYBRYYG(หรือแม้แต่Red Green Blue Black Green Blue Red Black...ในแผ่นงาน Excel) และกลับมาอีกครั้ง เป็นเพียงเรื่องของการแปลงฐานข้อมูลไบนารี่ของคุณจากฐาน 2 (หรือฐานสิบหกจากฐาน 16) ไปเป็นฐานในจำนวนสีที่คุณใช้ (4 ในตัวอย่างนี้)

ทีนี้แนวทางที่มีเหตุผลที่สุดคือการได้ 16 สี ด้วยวิธีนี้คุณจะต้องใช้จุดน้อยกว่า 4 เท่าซึ่งจะทำให้การสลับระหว่างปากกามีค่า สิ่งนี้ช่วยให้คุณสามารถเขียนข้อมูลลงบนกระดาษได้มากถึง 4 เท่าหากคุณต้องการหรืออาจมีความแม่นยำน้อยกว่าถึง 4 เท่าเมื่อทำการใส่จุดของคุณการปรับขนาดขึ้นอยู่กับคุณ ฉันอยากจะแนะนำให้ต่อต้านการวาดทุกบิต

ตัวอย่างเช่น5565 bytesจะต้องมีการคูณด้วยสองเพื่อให้ได้จำนวน hexadecimals ซึ่ง11130 hexadecimals(ตรงข้ามกับ44520 bits) ซึ่งสามารถใส่ลงใน106 x 106กริด

ขึ้นอยู่กับประเภทของข้อมูลที่คุณอาจได้รับจากการเพิ่มประสิทธิภาพ ...

คำแนะนำ:พยายามเลือกสีที่ต่างกันมากที่สุด (ตัดกันมากที่สุด) ...

ทางเลือกอื่นที่สามารถใช้ปากกาเดียว:

  • แทน hexadecimals ที่แตกต่างกันโดยสัญลักษณ์ที่แตกต่างกัน-, /, |, \, +...

  • เป็นตัวแทนของเลขฐานสิบหกที่แตกต่างกันโดยตัวอักษรพิกเซลเล็ก ๆ ดู avatar ของฉัน

    สิ่งนี้ทำให้มีประโยชน์ในการใช้บางอย่างเช่นฐาน 32 (หรือฐาน 36) โปรดทราบว่าQและ9จะเหมือนกันดังนั้นคุณจะต้องการพิกเซลด้านบนขวาของการQเป็นสีขาวเพื่อความแตกต่างที่ชัดเจน ฐาน 32 ต้องใช้53 x 53กริดสำหรับตัวอย่างของคุณรวมถึงระยะห่างเล็กน้อยเพื่อแยกระหว่างตัวอักษร


มีปัญหาเล็กน้อยกับเรื่องนี้ 1. ฉันตาบอดสี 2. มันต้องซื้อพวงปากกา 3. การแก้ไขข้อผิดพลาดไม่ได้เลย 4. มันเกี่ยวข้องกับรหัสงานเขียนแทนที่จะเป็นข้อความซึ่งมนุษย์แย่กว่ากัน
Jeremy Salwen

@ JeremySalwen: เอ่อการเขียนตัวละครในกริดนั้นไม่ยาก และคุณสามารถแก้ไขข้อผิดพลาดได้ด้วยการเขียนหมายเลขตรวจสอบตามยาวพิเศษหรือ CRC แต่จริงๆแล้วมันง่ายมากที่จะเขียนตัวอักษรจากกริดไปยังกริดซึ่งเป็นกรณีที่แย่ที่สุดที่คุณจะต้องตรวจสอบอีกครั้ง
Tamara Wijsman

1
@ JeremySalwen: และถ้าคุณตาบอดสีคุณก็ไม่ได้ใช้สีใด ๆ ที่คุณตาบอดสี
Tamara Wijsman

1
การตาบอดสีคือการลดมิติของพื้นที่สีมากกว่าการไม่สามารถเลือกดูสีบางสีได้ ฉันหมายถึงฉันอาจจะดึงออกดำ, น้ำเงิน, เหลือง, แดง, เขียว, เทา แต่ไม่มากขึ้น
Jeremy Salwen

@Tom คุณอาจจะต้องใส่อวตารเก่าของคุณเพื่อป้องกันความสับสน :)
Nate Koppenhaver

2

หากคุณต้องการให้ผู้คนสามารถอ่านและเขียนข้อมูลปัญหาเกี่ยวกับ Base64 และการเข้ารหัสข้อความจำนวนมากคือพวกเขาใช้อักขระเช่น I, l, 1, |, /, 0, O, o และอื่น ๆ ที่ผู้คนสับสน กับแต่ละอื่น ๆ

ตรวจสอบการเข้ารหัสBase32ของ Douglas Crockford ตัวอักษรของมันได้รับเลือกโดยเฉพาะเพื่อหลีกเลี่ยงตัวละครที่คล้ายกันและมีการตรวจจับข้อผิดพลาด


ขอบคุณฉันอาจจะใช้สิ่งนี้ แต่ก็ยังไม่สามารถแก้ปัญหาการแก้ไขข้อผิดพลาดได้
Jeremy Salwen

@ Jeremy การดำเนินงานครอกรวมถึงข้อผิดพลาดการตรวจสอบ หากคุณต้องการแก้ไขข้อผิดพลาดให้ตรวจสอบการแก้ไขข้อผิดพลาดไปข้างหน้า ( en.wikipedia.org/wiki/Forward_error_correction )
Dour High Arch

1

หลังจากอ่านความคิดเห็นของคุณนั่นฟังดูสมเหตุสมผลกว่า ฉันไม่แน่ใจว่าคุณตั้งใจจะเข้ารหัสข้อมูลขนาดเมกะไบต์เช่นนี้หรือไม่

ฉันขอแนะนำตามคำแนะนำของ Oliver ว่าคุณเพิ่มความหนาแน่นของข้อมูลของคุณโดยการยืมหน้าจากศูนย์เข้ารหัสของเบคอนซึ่งแก๊งค์คุกมักใช้เพื่อเข้ารหัสข้อความที่ซ่อนอยู่ในขีปนาวุธที่เขียนในรูปแบบสคริปต์ที่แตกต่างกันสองแบบ อักขระตัวพิมพ์เล็กหรือพิมพ์กับอักขระแบบตัวสะกดเช่น

Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
                                  =   P     A     S     T     A

อย่างไรก็ตามเนื่องจากเป้าหมายของคุณไม่ใช่ stegnography คุณเพียงแค่ใช้สิ่งนี้เพื่อขยายชุดสัญลักษณ์ของคุณ ในการดำเนินการนี้คุณสามารถมีร่ายมนตร์ได้ถึง 114 ร่ายมนตร์เพียงใช้ตัวอักษรและตัวเลขแบบตัวพิมพ์และตัวอักษรหรือ 12996 จุดรหัสโดยใช้การเข้ารหัสอักขระสองตัว

อย่างไรก็ตามเนื่องจากร่ายมนตร์ทั้งหมดมีค่ามากกว่า 15 และน้อยกว่า 256 จะเหมือนกันสำหรับรหัสเลขฐานสองตรง (หมายถึงคุณยังต้องใช้อักขระ 2 ตัวเพื่อแทนแต่ละไบต์ทำให้คุณมีความหนาแน่นของข้อมูล 4 บิตต่อตัวอักษรใน ทุกกรณี) คุณสามารถใช้จุดรหัสพิเศษ 98 glyphs / 12740 สำหรับการตรวจจับ / แก้ไขข้อผิดพลาด

วิธีในการทำเช่นนี้รวมถึง:

  • เลือกชุดคอมโบตัวละครที่อ่าน / เขียนได้ง่ายที่สุด 256 ชุด หากมีคำสั่งผสมอักขระอื่นเกิดขึ้นคุณรู้ว่านี่เป็นข้อผิดพลาดในการคัดลอก
  • ใช้อักขระสิ้นสุดสองเวอร์ชันเป็นพาริตีบิต
  • สร้างชุดสัญลักษณ์ glyph 16 ตัว 50 ชุด จากนั้นคุณสามารถใช้พวกเขาในการเข้ารหัสข้อมูลการแก้ไขข้อผิดพลาดเข้ารหัส

    เช่น{set 1}{set 1}หมายถึง 3 ต่อไปแทะเท่ากับ0x000, {set 1}{set 2}เท่ากับ0x001ฯลฯ

    คุณสามารถใช้สิ่งนี้เพื่อแสดงถึง 2500+ ค่า 4096 ที่เป็นไปได้ 1.5 ไบต์ ในทำนองเดียวกันคุณสามารถใช้เพียง 16 ชุดเพื่อเป็นตัวแทนของค่าทั้งหมดของไบต์ต่อไปนี้ให้ความซ้ำซ้อน 100% โดยไม่เพิ่มความยาวของข้อมูลที่เข้ารหัสของคุณ

หรือคุณสามารถใช้สัญลักษณ์พิเศษสำหรับการบีบอัดเพิ่มเติม:

  • ใช้การเข้ารหัสความกว้างของตัวแปรโดยเลือก 98 จุดของรหัสอักขระเดี่ยว วิธีนี้จะลดขนาดเนื้อหาที่เข้ารหัสโดยเฉลี่ยประมาณ 20%
  • ใช้สิ่งที่คล้ายกับการเข้ารหัสแบบรันไทม์โดยใช้ชุดสัญลักษณ์ glyph หรือชุดสัญลักษณ์ glyph ที่ต่างกันเพื่อแสดงถึงการทำซ้ำไบต์ / ไบต์ เช่นAb= aba; aB= abab; AB= ababab...
  • ใช้สัญลักษณ์พิเศษหรือจุดรหัสเพื่อแสดง "คำ" และ "วลี" ที่ซ้ำกันในข้อมูลของคุณ แม้ว่าข้อมูลที่ถูกบีบอัดไว้ล่วงหน้าจะมีระดับเอนโทรปีในระดับสูง แต่ฉันก็ไม่รู้ว่ามันจะมีประสิทธิภาพแค่ไหน


เพื่อลดข้อผิดพลาดในการคัดลอกฉันจะแสดงเนื้อหาที่เข้ารหัสในเส้นกริดและคัดลอกลงบนกระดาษกราฟ หากคุณสามารถใช้เครื่องเขียนแบบกำหนดเองที่มีการสลับสีคอลัมน์ / แถวหรือตารางหมากรุกแบบหมากรุกกับคอลัมน์ตัวอักษรและแถวหมายเลขสำหรับการค้นหาอย่างรวดเร็วซึ่งจะเพิ่มความแม่นยำในการคัดลอกเพิ่มเติม

นอกจากนี้คุณยังสามารถรวมเค้าโครงตารางที่สลับกับลักษณะอักขระที่สลับกันเป็นรูปแบบที่ง่ายในการตรวจหาข้อผิดพลาด นั่นคือถ้าคอลัมน์แปลก ๆ จะเป็นตัวพิมพ์ใหญ่เสมอหากผู้ติดตามพบว่าตัวเองเป็นตัวพิมพ์เล็กในคอลัมน์แปลก ๆ พวกเขารู้ว่าพวกเขาได้ทำผิดพลาดและสามารถเริ่มติดตามกลับไปดูว่าเกิดอะไรขึ้น


แต่ถ้ามีความสำคัญหลักของคุณคือความถูกต้องผมจะใช้การเข้ารหัสแบบไบนารี + รหัส Hamming การใช้รหัส Hamming ที่สั้นลง (12, 8) บนกระดาษกราฟมาตรฐานคุณอาจพอดี 187 ไบต์เท่านั้นและเข้ารหัสข้อมูลเพียง 124 ไบต์ แต่มันสามารถถอดความได้อย่างรวดเร็ว (สแลชสำหรับ 1 ไม่มีอะไรสำหรับ 0) และให้การแก้ไขข้อผิดพลาดเดียว การตรึงบิตพาริตีพิเศษ (13, 8) จะช่วยให้ SECDED (การแก้ไขข้อผิดพลาดเดียว, การตรวจจับข้อผิดพลาดสองครั้ง) ด้วยการใช้รหัส hamming มาตรฐานเช่น (15, 11) หรือ (31, 26) คุณจะได้รับประสิทธิภาพที่ดียิ่งขึ้นด้วย 137 และ 156 ไบต์ของข้อมูลต่อแผ่นตามลำดับ อัตราโค้ดที่สูงขึ้นสามารถทำได้ขึ้นอยู่กับความถูกต้องที่คุณคิดว่าผู้ใช้บริการของคุณสามารถทำได้

การเข้ารหัสแบบไบนารีจะง่ายต่อการอ่าน (ออกเสียง) และ OCR / OMR


เห็นได้ชัดว่าฉันวางแผนที่จะใช้ตัวอักษรตัวพิมพ์ใหญ่เช่นกัน จากรูปแบบการแก้ไขข้อผิดพลาดทั้งหมดที่คุณแนะนำฉันไม่เห็นวิธีที่จะนำไปใช้โดยไม่ต้องออกแบบรูปแบบไฟล์ที่กำหนดเอง ฯลฯ ไม่มีจริง ๆ ก่อนหน้านี้สำหรับการวางการป้องกันการแก้ไขข้อผิดพลาดในไฟล์หรือไม่? บางทีฉันควรจะกล่าวด้วยว่าการสร้างโปรแกรมแบบกำหนดเองนั้นไม่พึงปรารถนาอย่างมากเช่นกัน? ฉันไม่สามารถหาโปรแกรมใด ๆ ที่จะปกป้องไฟล์ของคุณด้วยรหัสการแก้ไขข้อผิดพลาด
Jeremy Salwen

จุดของฉันไม่เพียงแค่ใช้ตัวอักษรตัวพิมพ์ใหญ่เท่านั้น แต่ยังใช้สคริปต์ / แบบอักษรที่แตกต่างกัน หากคุณใช้อักขระตัวอักษรและตัวเลขบนและล่างเท่านั้นคุณมีเพียง 62 ร่ายมนตร์หรือ 3844 รหัสจุด คุณสามารถรับคะแนนโค้ดได้มากกว่าสามเท่าโดยใช้ 2 สคริปต์เพื่อใช้ประโยชน์จากสื่อบันทึกข้อมูลที่ใช้สำหรับการถ่ายโอนซึ่งเป็นจุดประสงค์ของคำตอบของฉัน หากคุณไม่ต้องการใช้ประโยชน์จากความจริงที่ว่านี่เป็นสื่อการเขียนมีรูปแบบไฟล์มากมายที่ใช้การเข้ารหัสข้อผิดพลาด รูปแบบการเก็บถาวร / การบีบอัดส่วนใหญ่มีการแก้ไขข้อผิดพลาดในตัว
Lèsemajesté

ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยการสร้างรูปแบบไฟล์ใหม่ เทคนิคทั้งหมดที่ฉันพูดถึงนั้นมีไว้สำหรับการเข้ารหัสข้อมูลไบนารีด้วยตัวเองด้วยภาพ / ข้อความที่เขียนด้วยลายมือ คุณจะไม่เก็บมันไว้ในคอมพิวเตอร์แบบนั้น (คุณไม่สามารถเก็บภาพที่สแกนได้เลย) โดยทั่วไปคุณจะมีโปรแกรมเข้ารหัสข้อมูลส่งภาพบนหน้าจอเพื่อให้ผู้ใช้คัดลอก จากนั้นในการถ่ายโอนกลับไปยังคอมพิวเตอร์คุณจะต้องใช้โปรแกรมถอดรหัสที่ OCR / OMR เป็นรูปภาพที่สแกนหรือรับอินพุตผ่านแป้นพิมพ์ (เช่นalt+ aสำหรับเคอร์เซอร์ "a")
Lèsemajesté

ดูสินั่นคือสิ่งที่ฉันมีปัญหากับ: "คุณจะมีโปรแกรมเข้ารหัสข้อมูล" ... ไม่ฉันไม่ ฉันไม่มีโปรแกรมที่จะทำสิ่งนี้และฉันไม่รู้ว่าจะทำอย่างไรกับโปรแกรมนี้ ฉันยังไม่ทราบถึงรูปแบบไฟล์ใด ๆ ที่สามารถจัดการกับไบต์ที่ถูกลบ (ไม่ถูกลบ) ได้อย่างสง่างามจากช่วงเริ่มต้นของไฟล์ด้านบนของข้อผิดพลาดอื่น ๆ ฉันเห็นด้วยอย่างแน่นอนว่านี่เป็นวิธีการเพิ่มความหนาแน่นของข้อมูล แต่นั่นไม่ใช่ความกังวลหลักของฉันตอนนี้มันง่ายต่อการอ่าน / เขียนและป้องกันข้อผิดพลาด
Jeremy Salwen

@ Jeremy: ดังที่ฉันกล่าวว่ารูปแบบการเก็บถาวรส่วนใหญ่มีการแก้ไขข้อผิดพลาดซึ่งดูเหมือนว่าจะทำงานได้ดีพอสำหรับคนส่วนใหญ่ แต่ถ้าคุณต้องการบางสิ่งที่ออกแบบมาเป็นพิเศษสำหรับการถอดความด้วยมือคุณจะต้องเขียนหรือให้ใครบางคนเขียนอะไรให้คุณ ทางเลือกที่ดีที่สุดของคุณคือดูแอพพลิเคชั่นที่มีอยู่ซึ่งออกแบบมาเพื่อส่งสัญญาณเสียงรบกวนสูง แม้ว่าตัวเลือกที่ง่ายที่สุดโดยไม่ต้องกังวลกับความหนาแน่นของข้อมูลคือการใช้ไฟล์ RAR ที่มีการแก้ไขข้อผิดพลาดระดับสูงจากนั้นทำซ้ำส่วนหัวข้อ 3 ครั้งเพื่อทำซ้ำซ้อนแบบแยกส่วนสามส่วน
Lèsemajesté

1

เราเคยใช้S-Recordsเพื่อจุดประสงค์นี้ มีการตรวจสอบอย่างง่ายต่อบรรทัดสำหรับการตรวจสอบข้อผิดพลาด โดยทั่วไปทั้งหมดยกเว้นบรรทัดสุดท้ายคือความยาวคงที่ดังนั้นเครื่องหมายจุดสิ้นสุดของบรรทัดทำหน้าที่เป็นการตรวจสอบการแทรกและการลบ ไม่มีการตรวจสอบว่ามีสายที่ขาดหายไป สำหรับสิ่งนี้เราเพียงแค่นับจำนวนบรรทัด ไฟล์ส่วนใหญ่สั้น, น้อยกว่า 100 บรรทัด, แต่ฉันจำอย่างน้อยหนึ่งไฟล์ที่มี 300 บรรทัดหรือมากกว่า มันเป็นไฟล์พิมพ์ที่น่าเบื่อมากในระบบ แน่นอนว่าในบรรดาโปรแกรมแรกที่ถ่ายโอนด้วยวิธีนี้คือตัวดาวน์โหลด;)


0

การรู้จำเครื่องหมายของแสงถูกใช้มานานหลายทศวรรษเพื่อสร้างแบบฟอร์มที่เขียนด้วยลายมือที่เครื่องอ่านได้ หน้า Wikipedia มีลิงก์ไปยัง Open Source หลายเวอร์ชัน

โรงเรียนใช้ OMR มานานในการทดสอบ แบบฟอร์มใช้งานง่ายและอ่านง่ายและโดยทั่วไปความแม่นยำจะดีกว่าการป้อนข้อมูลด้วยแป้นพิมพ์ เพื่อความแม่นยำที่สูงขึ้นผู้ผลิตเชิงพาณิชย์อย่าง Scantron และ ReMark สามารถสร้างฟอร์มที่กำหนดเองได้


น่าสนใจน่าเสียดายที่ต้องใช้สแกนเนอร์หรือระบบภาพอื่น ๆ ที่ต่อกับคอมพิวเตอร์เพื่อทำงาน
Jeremy Salwen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.