简单py解密笔记

简单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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值