简单py解密笔记

    技术2026-01-29  8

    简单py解密笔记

    原文及思路

    import base64 # Base64编码 # base64是一种用64个字符来表示任意二进制数据的方法。(因为2的6次方为64) # base64编码要求把3个8位字节(3*8=24)转化为4个6位字节(4*6=24),之后在6位字节的前面补两个0,形成新的8位字节。 # 如果剩下的字符不足3个字节,则用0填充,输出字符试用‘=’,因此编码后输出带文本末尾可能会出现一个或两个‘=’。 def encryption(str, n): cipher = [] for i in range(len(str)): if str[i].islower(): if ord(str[i]) < 123-n: c = chr(ord(str[i]) + n) cipher.append(c) else: c = chr(ord(str[i]) + n - 26) cipher.append(c) elif str[i].isupper(): if ord(str[i]) < 91-n: c = chr(ord(str[i]) + n) cipher.append(c) else: c = chr(ord(str[i]) + n - 26) cipher.append(c) else: c = str[i] cipher.append(c) cipherstr = ('').join(cipher) return cipherstr # 凯撒密码 # 每一个英文字符循环替换为字母表序列中该字符后面的第n个字符 def rot13(s, OffSet=13): def encodeCh(ch): f = lambda x: chr((ord(ch) - x + OffSet) % 26 + x) return f(97) if ch.islower() else (f(65) if ch.isupper() else ch) return ''.join(encodeCh(c) for c in s) # ROT13加密 # rot13是一种简易的置换,将26个字母的前半部分与后半部分相互交换 # 原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z # 密文:N O P Q R S T U V W X Y Z A B C D E F G H I J K L M flag = "ABC012" print(flag) for i in range(0,len(flag)): d = (ord(flag[i]))+1 flag+=(chr(d)) print(len(flag)) print(i,end = ",") print(flag[i]) print(ord(flag[i])) print(d) print(chr(d)) print(flag) print(flag[0:6:1]) j = (rot13(flag[::-1])) print(flag[::-1]) print(rot13(flag[::-1])) # j用凯撒密码加密 flag = encryption(j,4) print(flag) # 编码格式转换为UTF-8 flag = flag.encode('utf-8') print(flag) # UTF-8解码 print(flag.decode('utf-8')) # 采用base64进行加密 # str() 函数将对象转化为适于人阅读的形式 miwen = str(base64.b64encode(flag)) print(base64.b64encode(flag)) print(miwen) # 解密时使用 # print(base64.b64encode(miwen))得到flag # # reverse( )用于列表中数据的反转 # # join()函数 # # 语法: 'sep'.join(seq) # # sep:分隔符。可以为空 # # seq:要连接的元素序列、字符串、元组、字典 # # 上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串 # # 返回值:返回一个以分隔符sep连接各个元素后生成的字符串 print(''.join(reversed(miwen))) print(''.join(reversed(''.join(reversed(miwen)))))

    已知密文推导最初字符串

    #密文==AcvBna6JGdyNnY0J3Yzpme4J3Y3FHcxtWYjV3c0NWdzRGdrFWezRGe' import base64 def encryption(str, n): cipher = [] for i in range(len(str)): if str[i].islower(): if ord(str[i]) < 123-n: c = chr(ord(str[i]) + n) cipher.append(c) else: c = chr(ord(str[i]) + n - 26) cipher.append(c) elif str[i].isupper(): if ord(str[i]) < 91-n: c = chr(ord(str[i]) + n) cipher.append(c) else: c = chr(ord(str[i]) + n - 26) cipher.append(c) else: c = str[i] cipher.append(c) cipherstr = ('').join(cipher) return cipherstr def rot13(s, OffSet=13): def encodeCh(ch): f = lambda x: chr((ord(ch) - x + OffSet) % 26 + x) return f(97) if ch.islower() else (f(65) if ch.isupper() else ch) return ''.join(encodeCh(c) for c in s) # base64解码 miwen = b'==AcvBna6JGdyNnY0J3Yzpme4J3Y3FHcxtWYjV3c0NWdzRGdrFWezRGe' print(base64.b64encode(miwen)) # UTF-8解码 print(base64.b64encode(miwen).decode('utf-8')) i = 'PT1BY3ZCbmE2SkdkeU5uWTBKM1l6cG1lNEozWTNGSGN4dFdZalYzYzBOV2R6UkdkckZXZXpSR2U=' print(i) # 凯撒密码解密 j = encryption(i,22) #使用凯撒加密时,每个英文替换为该字母后面的第4个字符,解密时把每个英文替换为该字母后面的第22个字符 print(j) # ROT13解密 k = j[::-1] print(k) print(rot13(k)) print(len(k)) print(k[0:38:1])
    Processed: 0.016, SQL: 9