iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 10

🚀 DAY 10:圖片加解密|bitwise_xor 影像加密與解密

  • 分享至 

  • xImage
  •  

影像加解密是保護圖像資訊安全的重要技術。
透過加密,可以避免影像內容被未授權的人查看;解密則可還原原始圖片。
今天我們用 OpenCV 與 NumPy,示範如何利用位元異或(bitwise_xor)來實作簡單的影像加密與解密。


🖼️ 測試圖片準備

首先,準備一張彩色圖片(image.jpg)並放在同一資料夾中。
使用 OpenCV 讀取圖片:

import cv2
import numpy as np

img = cv2.imread('image.jpg')

為了觀察加解密前後的效果,先顯示原始圖片:

cv2.imshow("Original Image", img)

為了讓視窗停留方便觀察,最後加上:

cv2.waitKey()
cv2.destroyAllWindows()

🔐 產生隨機金鑰(Key)

使用 NumPy 隨機產生一個與圖片尺寸及通道數相同的整數陣列,作為加密用的金鑰。
這把金鑰將用於和圖片進行位元異或運算。

# 產生與圖片大小相同的隨機整數陣列(值介於0~255)
key = np.random.randint(0, 256, img.shape, np.uint8)

cv2.imshow("Encryption Key", key)

下圖顯示原圖與隨機金鑰:
https://ithelp.ithome.com.tw/upload/images/20250914/20129482f9lkbK9oMX.png


🔒 影像加密

利用 OpenCV 的 bitwise_xor 函數,將原圖與金鑰逐位元做 XOR 運算,產生加密後的圖片。
XOR 運算會對應像素的每個 bit 做異或,讓圖片外觀變得像是亂碼。

# 將原圖與金鑰進行 XOR,得到加密後的影像
img_encrypted = cv2.bitwise_xor(img, key)

cv2.imshow("Encrypted Image", img_encrypted)

加密後的圖片如下:
https://ithelp.ithome.com.tw/upload/images/20250914/20129482VRf9rtKt4h.png


🔓 影像解密

解密過程與加密相同,只要將加密後的圖片與同一把金鑰再做一次 XOR,就能還原原始圖片。
這是 XOR 運算的特性:同一數據 XOR 兩次,會還原成原始資料。

# 對加密圖片與同一金鑰再做 XOR,還原原圖
img_decrypted = cv2.bitwise_xor(img_encrypted, key)

cv2.imshow("Decrypted Image", img_decrypted)

解密後的圖片如下:
https://ithelp.ithome.com.tw/upload/images/20250914/20129482pU1mVXTumV.png

你可以比較解密後的圖片和原圖,它們是相同的,代表解密成功。


bitwise_xor 加解密原理簡述

bitwise_xor 是一種逐位元的異或運算,常用於簡易的影像加解密。
加密時,原圖每個像素的位元與隨機金鑰的對應位元做 XOR,產生看似隨機的加密圖片。
解密時,用相同金鑰對加密圖做 XOR,因 XOR 的可逆性,成功還原原始圖像。

簡單公式:
原始資料 XOR 金鑰 = 加密資料
加密資料 XOR 金鑰 = 原始資料

此方法運算快速且易實現,但金鑰必須妥善保存,且安全性有限,適合教學和簡單保護。


📌 今日結語

  • 位元異或(bitwise_xor)提供了簡單有效的影像加解密方式。
  • 加密與解密運算相同,只要金鑰相同即可完全還原圖片。
  • 實務中會採用更複雜的加密算法來保護圖像資料安全。
  • 加密技術對隱私保護、醫療影像安全傳輸等場景非常重要。
  • 建議多嘗試不同圖片與金鑰,體驗 XOR 加密原理與效果。

上一篇
🚀 DAY 9:圖片邊界與填充|border、padding
下一篇
🌅 DAY 11:影像混合|addWeighted 圖像融合效果
系列文
OpwnCV影像處理新手村14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言