如果使用視覺密碼術拆分二維碼,是否可以掃描二維碼?
我正在嘗試讓 python 腳本以這樣的方式工作,即它需要一個 QR 碼(jpeg 或 png)將 jpeg 拆分為兩個圖像,如下所示 https://github.com/LessonStudio/VisualCryptography
我不確定是否可以掃描程式碼。我知道我們可以取回圖像,但是儲存的資訊呢?
任何幫助,將不勝感激。
視覺密碼再生圖像的一個典型問題是它們的對比度低:當使用疊加透明度時,原始圖像中的白色往往會變灰(或者更準確地說,黑白抖動 50%,從二維碼掃描器的視角);由於未對準,可能會有一些白色在黑色區域蔓延。一些掃描器會容忍這種情況,但會弄亂其他掃描器。掃描將比使用原件更困難。
如果原始 QR 碼上的每個塊被分成兩個矩形,我想圖 2 中的經典方案將無法可靠地工作,如圖所示。
更好的做法是將 QR 碼的每個塊細分為更精細的矩陣,例如 8x8:QR 碼的每個塊都轉換為 X=或 Y= ,其中白色實際上是透明的:
- 二維碼中的黑色塊以 50% 的機率在第一張透明片中變成 X,在第二張透明片中變成 Y,或者在第一張透明片中變成 Y,在第二張透明片中變成 X;這樣透明膠片的疊加將基本上是黑色的。
- QR 碼中的白色塊以 50% 的機率在兩個透明膠片中變為 X,或在兩個透明膠片中變為 Y;這樣透明膠片的疊加將基本上是灰色的(黑色和透明的 50% 抖動)。
無法從單個透明度中提取任何資訊。
對僅傳達結構的塊進行特別編碼可能會有所幫助:Finder Pattern,Separator,Quiet Zone,Timing Pattern(如果有),Alignment Pattern(如果有)。對於這些,我建議,為了幫助確定方向並將透明膠片的同一面朝上:
- 二維碼中的黑色塊在兩張透明膠片中都表示為黑色。
- 二維碼中的白色塊在兩種透明膠片中都表示為 X 或 Y,根據 $ (h+\lfloor v/2\rfloor)\bmod 2 $ 在哪裡 $ h $ 和 $ v $ 是塊的座標為整數。
上述內容並未解決確定應從哪一側掃描透明膠片:並非所有掃描器都接受鏡像。但是用一張白紙代替一個透明膠片來解決這個問題並不是一個好主意,因為它可能會加劇對齊問題:不同的材料對濕度和老化的反應不同。這面朝上可能會做(並且是最簡單的方向)。
選擇合適的塊細分是一種折衷:太粗糙,掃描器可能會將塊的像素視為二維條碼的網格;太精細,透明膠片的對齊將變得不可行。
如果使用X 和 Y 方向相差 90° 的偏振濾光片,則無需將 QR 碼塊細分為更小的像素、更真實的白色(假設在對齊的透明膠片後面有一個非偏振光源),並且沒有抖動灰色,因此更容易閱讀。但是,我不知道準備透明膠片的自動化方法;最接近可行的想法是從 QR 碼塊大小的透明偏振方塊開始,並將它們以適當的方向粘在某個網格上。
為什麼要使用視覺密碼學來拆分二維碼,而不是秘密共享原始數據,而是為每個共享生成一個二維碼?這樣,您可以掃描共享,並通過組合它們來重建原始秘密。