麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

RC4-文件加密的python實現方法

2019-11-02 14:23:52
字體:
來源:轉載
供稿:網友

   本文實例講述了RC4文件加密的python實現方法。分享給大家供大家參考。具體分析如下:

  基于RC4流加密算法,使用擴展的16*16的S盒,32字節密鑰。

  目前應該是比較安全的。

  剛學習python,好不容易調通了。

  而且在VC和python下各實現了一遍,兩個平臺能夠互相加解密,很有成就感的說。

  下面是python3.0中的實現,在2.x下需要稍加修改。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 # for python 3.0 # from 李勃 import struct,sys,os,binascii """ RC4加密算法 16*16 S盒 加密單元:short """ def RC4(pkey,keylen,pin,dlen): N=65536 S = list(range(N)) j = 0 for i in range(N): j = (j + S[i] + pkey[i%keylen])%N temp = S[i] S[i] = S[j] S[j] = temp i = j = 0 pout= b'' for x in range(dlen): i = i+1 j = (j + S[i])%N temp = S[i] S[i] = S[j] S[j] = temp pout += struct.pack('H',pin[x]^S[(S[i]+S[j])%N]) return(pout) # bytes->short def Coding(data): if(len(data)%2): data+=b'' dlen = len(data)//2 return(struct.unpack(str(dlen)+'H',data)) # short->bytes def unCoding(data): d=b'' for i in range(len(data)): d += struct.pack('H',data[i]) return(d) #產生32字節密鑰 def CreatKey(Keyt): pl = len(Keyt) Key=b'' r=0 for i in range(32): k=(Keyt[r%pl]+i)%256 Key+= struct.pack('B',k) r+=1 return Key #更新密鑰 def UpdataKey(Keyt): Key = unCoding(Keyt) #循環左移 Key = Key[1:] + struct.pack('B',Key[0]) tem=0 #求和 for i in range(len(Key)): tem += Key[i]; Keyo=b'' #Xor for i in range(len(Key)): Keyo += struct.pack('B',(Key[i]^tem)%256) tem += Keyo[i]>>3 tem = tem % 256 return(Coding(Keyo)) if __name__ == '__main__': #獲得輸入文件 if len(sys.argv)==1: filename = input('源文件: ') else: filename = sys.argv[1]   try: fin = open(filename,'rb') except: print('打開文件失敗!') input() sys.exit() print(filename) #打開輸出文件 if filename[-4:]=='.RC4': eID = 1 key=input('輸入解密密鑰: ').encode() ofilename = filename[:-4] else: eID = 2 key=input('輸入加密密鑰: ').encode() ofilename = filename+'.RC4' key = Coding(CreatKey(key)) key = UpdataKey(key)   #處理重名 while os.path.exists(ofilename): ofilename = os.path.dirname(ofilename)+ '副本 '+ os.path.basename(ofilename) fout = open(ofilename,'wb') print(ofilename) #解密 if eID==1: #讀文件長度 filelen = struct.unpack('I',fin.read(4))[0] print('FlieLen =',filelen,'n......') while 1: #讀塊大小 ps= fin.read(2) if not ps: #文件結束 break packsize = struct.unpack('H',ps)[0] #讀數據 dd=fin.read(packsize) #解密 dd=Coding(dd) x = RC4(key,len(key),dd,len(dd)) key = UpdataKey(key) #crc crc = struct.unpack('I',fin.read(4))[0] if binascii.crc32(x)!=crc: print('CRC32校驗錯誤!',crc,binascii.crc32(x)) input() sys.exit() fout.write(x) #裁剪末尾填充位 fout.truncate(filelen) #加密 elif eID==2: #獲得文件長度 fin.seek(0,2) filelen = fin.tell() print('FlieLen =',filelen,'n......') fin.seek(0,0) fout.write(struct.pack('I',filelen)) while 1: #讀數據 dd=fin.read(65534) if not dd: #文件結束 break #末尾填充 srl = len(dd) if srl%2: srl+=1; dd+=b'' #crc crc = struct.pack('I',binascii.crc32(dd)) #加密數據 dd=Coding(dd) x = RC4(key,len(key),dd,len(dd))
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 请播放一级毛片 | 中文字幕免费一区 | 九一传媒在线观看 | 成人免费在线网 | 精品一区二区三区日本 | 羞羞视频免费网站含羞草 | 第一区免费在线观看 | 亚洲一区动漫 | 超碰97最新 | 久久精品一区二区三区国产主播 | 国产亚洲精品久久午夜玫瑰园 | 欧美成人国产va精品日本一级 | 四虎久草 | 国产成人精品无人区一区 | 免费日本一区二区 | 91九色国产视频 | 操操操日日日干干干 | 国产成人自拍小视频 | 欧美成年性h版影视中文字幕 | av日韩在线免费观看 | 日韩三区视频 | 中文字幕免费在线看 | 欧美成在线视频 | 中文字幕一二三区芒果 | av免费在线免费观看 | 免费一级片网站 | 国产91亚洲精品一区二区三区 | 欧美a∨亚洲欧美亚洲 | 性高跟鞋xxxxhd4kvideos | 91午夜在线观看 | 国产亚洲综合一区二区 | 美女在线观看视频一区二区 | 成人在线观看免费观看 | 久草在线综合 | 欧美高清第一页 | 91社区电影 | 国产一区网址 | 2021国产精品视频 | 久草在线观看福利视频 | 国产精品夜色视频一级区 | 毛片在线免费观看完整版 |