Python实现Arnold置乱
时间: 2023-06-08 22:07:12 浏览: 155
可将一张图片加密,保护图片的安全性,而Arnold置乱是一种基于非线性动力学的置乱算法。
以下是Python实现Arnold置乱的代码:
```
import numpy as np
import cv2
def arnold_encrypt(img, key):
H, W = img.shape[:2]
N = H if H > W else W
N += 1
arr_x = np.zeros((N, N), dtype=np.int32)
arr_y = np.zeros((N, N), dtype=np.int32)
arr_x[0, :], arr_y[:, 0] = np.arange(N), np.arange(N)
for i in range(N - 1):
arr_x[i + 1, :] = (arr_x[i, :] + arr_y[i, :]) % N
arr_y[:, i + 1] = (arr_x[:, i] + arr_y[:, i]) % N
arr_x, arr_y = arr_x[1:, :-1], arr_y[1:, :-1]
arr_x, arr_y = arr_x.flatten(), arr_y.flatten()
img = img[..., ::-1]
for k in range(key):
img = img[arr_y, arr_x, :]
img = np.rot90(img, k=-1, axes=(0, 1))
img = img[..., ::-1]
return img
def arnold_decrypt(img, key):
return arnold_encrypt(img, -key)
if __name__ == '__main__':
img = cv2.imread('test.png')
img_encrypt = arnold_encrypt(img, key=10)
img_decrypt = arnold_decrypt(img_encrypt, key=10)
cv2.imshow('Original', img)
cv2.imshow('Encrypted', img_encrypt)
cv2.imshow('Decrypted', img_decrypt)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,img为需要加密的图片,key为密钥,可根据需要设置。对图片进行加密和解密的函数分别为Arnold_encrypt和Arnold_decrypt。
阅读全文