找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1410|回复: 0
打印 上一主题 下一主题
收起左侧

利用python实现混沌加密

[复制链接]
跳转到指定楼层
楼主
ID:1029290 发表于 2022-5-24 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下代码使用python实现的复合混沌加密一张图片
  1. import cv2
  2. import math
  3. import numpy as np


  4. def int2bin8(x):                               # 整型转8位二进制
  5.     result="";
  6.     for i in range(8):
  7.         y=x&(1)
  8.         result+=str(y)
  9.         x=x>>1
  10.     return result[::-1]

  11. def int2bin16(x):                              # 整型转8位二进制
  12.     result="";
  13.     for i in range(16):
  14.         y=x&(1)
  15.         result+=str(y)
  16.         x=x>>1
  17.     return result

  18. def Encryption(img,j0,g0,x0,EncryptionImg):
  19.     x = img.shape[0]
  20.     y = img.shape[1]
  21.     c = img.shape[2]
  22.     g0 = int2bin16(g0)
  23.     for s in range(x):
  24.         for n in range(y):
  25.             for z in range(c):
  26.                 m = int2bin8(img[s][n][z])                   # 像素值转八位二进制
  27.                 ans=""
  28.                 print("ok")
  29.                 for i in range(8):
  30.                     ri=int(g0[-1])                           # 取手摇密码机最后一位ri
  31.                     qi=int(m[i])^ri                          # 与像素值异或得qi
  32.                     xi = 1 - math.sqrt(abs(2 * x0 - 1))      # f1(x)混沌迭代
  33.                     if qi==0:                                # 如果qi=0,则运用x0i+x1i=1;
  34.                         xi=1-xi;
  35.                     x0=xi                                    # xi迭代
  36.                     t=int(g0[0])^int(g0[12])^int(g0[15])     # 本源多项式x^15+x^3+1
  37.                     g0=str(t)+g0[0:-1]                       # gi迭代
  38.                     ci=math.floor(xi*(2**j0))%2              # 非线性转换算子
  39.                     ans+=str(ci)
  40.                 re=int(ans,2)
  41.                 EncryptionImg[s][n][z]=re                    # 写入新图像

  42. def Decryption(EncryptionImg, j0, g0, x0, DecryptionImg):
  43.     x = EncryptionImg.shape[0]
  44.     y = EncryptionImg.shape[1]
  45.     c = EncryptionImg.shape[2]
  46.     g0 = int2bin16(g0)
  47.     for s in range(x):
  48.         for n in range(y):
  49.             for z in range(c):
  50.                 cc = int2bin8(img[s][n][z])
  51.                 ans = ""
  52.                 print("no")
  53.                 for i in range(8):
  54.                     xi = 1 - math.sqrt(abs(2 * x0 - 1))
  55.                     x0 = xi
  56.                     ssi = math.floor(xi * (2 ** j0)) % 2
  57.                     qi=1-(ssi^int(cc[i]))
  58.                     ri = int(g0[-1])
  59.                     mi=ri^qi
  60.                     t = int(g0[0]) ^ int(g0[12]) ^ int(g0[15])
  61.                     g0 = str(t) + g0[0:-1]
  62.                     ans += str(mi)
  63.                 re = int(ans, 2)
  64.                 DecryptionImg[s][n][z] = re


  65. if __name__ == "__main__":
  66.     img = cv2.imread("D:/pycharmproject/network_security/2.bmp", 1)                    # 读取原始图像
  67.     cv2.imshow("img", img)                                                             # 显示原图

  68.     EncryptionImg = np.zeros(img.shape, np.uint8)
  69.     Encryption(img,10,30,0.123345,EncryptionImg)                                       # 加密
  70.     cv2.imwrite("D:/pycharmproject/network_security/EncryptionImg2.bmp",EncryptionImg)  # 保存
  71.     cv2.imshow("EncryptionImg", EncryptionImg)                                        # 显示

  72.     img = cv2.imread("D:/pycharmproject/network_security/EncryptionImg2.bmp", 1)        # 读取加密图像
  73.     DecryptionImg = np.zeros(img.shape, np.uint8)
  74.     Decryption(img, 10, 30, 0.123345, DecryptionImg)                                   # 解密
  75.     cv2.imwrite("D:/pycharmproject/network_security/DecryptionImg2.bmp", DecryptionImg) # 保存
  76.     cv2.imshow("DecryptionImg ", DecryptionImg)                                        # 显示

  77.     cv2.waitKey(0)
复制代码

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表