2021-2022-1 20211420《信息安全專業導論》XOR加密


利用異或門加密的原理

print(True ^ True)
print(False ^ False)
print(True ^ False)
print(True ^ False)
print(1 ^ 1)
print(0 ^ 0)
print(1 ^ 0)
print(0 ^ 1)

對內容進行簡單的加密與解密(Elvis)

text = 'Elvis'
key = 169                                 # 設置密鑰
list1 = list(text)                        # 創建新列表
result = ''                               # 創建空字符串,用來容納二進制數結果
result1 = ''                              # 創建空字符串,用來容納十進制數結果
for char in list1:                        # 遍歷列表,轉換成數字
    num = ord(char)                       # 轉換成十進制數
    num_key = num ^ key                   # 進行按位異或運算加密
    num_key1 = bin(num_key)[2:]           # 將加密形成的十進制數轉換成二進制數
    result += str(num_key1) + ' '         # 形成二進制數字符串結果
    result1 += str(num_key) + " "         # 形成十進制數字符串結果
resultsum = result
print("加密后的數據(二進制數):" + resultsum)
print("加密后的數據(十進制數):" + result1)
list2 = resultsum.split(" ")              # 對二進制數字符串創建為列表
list3 = list2.remove('')

# 實現解密
deresult = ''
deresult1 = ''
for item in list2:
    denum = int(item, 2)
    denum_key = denum ^ key
    destr = chr(denum_key)
    deresult += str(destr) + ''
    deresult1 += str(denum_key) + ' '
print("解密后的數據:", deresult)
print("解密后的數據(十進制數):", deresult1)

結果如上圖

用MD5實現加密

#md5加密
import hashlib
hash_md5 = hashlib.md5()
x = input("Please input your text:")
print("Text:", x)
data = x.encode('utf-8', errors='ignore')                       # 對x編碼,忽略潛在錯誤
hash_md5.update(data)                                           # 更新數據,保證數據被成功編碼
md5_str = hash_md5.hexdigest()                                  # hash.hexdigest()返回摘要,作為十六進制數據字符串值
print("MD5:", md5_str)                                          # 打印十六進制字符串值

#形成key
from random import *
rad = "".join([choice("0123456789ABCDEF") for i in range(32)])  # 從0到F中隨機選取一個數,並形成一個32位的密鑰
print("key:", rad)                                              # 打印密鑰

#xor加密
txt1 = []
t = ''
u = ''
for a in range(32):
    i = '0x'+md5_str[a]                                         # 添加16進制的前綴0x,形成標准十六進制數
    j = '0x'+rad[a]                                             # 添加16進制的前綴0x,形成標准十六進制數
    p = bin(eval(i)).replace('0b', '')                          # 將十六進制數轉換成二進制數,並去掉二進制數前綴0b
    q = bin(eval(j)).replace('0b', '')                          # 將十六進制數轉換成二進制數,並去掉二進制數前綴0b
    for c in range(min(len(p), len(q))):                        # 對p和q按位異或運算
        if (p[-c] == q[-c]):
            e ='0'
        elif(p[-c] !=q [-c]):
            e ='1'
        t = e + t
    t ='0b'+t                                                   # 得到按位異或運算結果
    d = t                                                       # 把按位異或運算結果賦值給d
    t = ''                                                      # 重新給t賦值為空字符串
    s = hex(eval(d)).replace('0x', '')                          # eval()函數用於返回表達式計算結果,同時轉換為十六進制數,去掉前綴0x
    u = u+s                                                     # 得到CipherText
print("CipherText:", u)                                         # 打印CipherText


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM