吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1249|回复: 14
收起左侧

[Python 原创] 基于base64的文字加密

[复制链接]
矢岛舞美 发表于 2024-3-26 09:59
逻辑比较简单,就是首先通过base64进行转码,然后将所有字母往后挪一位,纯属上班无聊的摸鱼之作按1加密,按2解密
QQ截图20240326095751.jpg
[Python] 纯文本查看 复制代码
import base64

def shift_letters(text, shift=1):
    shifted_text = ""
    for char in text:
        if char.isalpha():
            if char.islower():
                shifted_text += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
            else:
                shifted_text += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
        else:
            shifted_text += char
    return shifted_text

def encrypt(input_text):
    base64_encoded = base64.b64encode(input_text.encode()).decode()
    encrypted_text = shift_letters(base64_encoded)
    return encrypted_text

def decrypt(encrypted_text):
    unshifted_text = shift_letters(encrypted_text, -1)
    base64_decoded = base64.b64decode(unshifted_text).decode()
    return base64_decoded

def main():
    while True:
        choice = input("Do you want to (1) Encrypt or (2) Decrypt? Enter 1 or 2 (or 'exit' to quit): ")
        if choice == 'exit':
            break
        if choice not in ['1', '2']:
            print("Invalid choice. Please enter 1 or 2.")
            continue

        text = input("Enter the text: ")

        if choice == '1':
            print("Encrypted text:", encrypt(text))
        elif choice == '2':
            try:
                print("Decrypted text:", decrypt(text))
            except Exception as e:
                print("An error occurred during decryption. Make sure the input is correct.")
                print("Error message:", str(e))

if __name__ == "__main__":
    main()

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2024-3-27 10:12

base64 只是编码方案,不属于加密。通常是根据输入的“字节信息”进行加密,加密完后有编码到合法 ASCII 字节集字符的时候才会使用 base64 等编码方案对加密后的内容处理一下。


其实可以用 str.translate 替代偏移量:

b64_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
b64_table_encode = 'BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza0123456789+/'
# 换一个密钥?
# b64_table_encode = '6zVaRM7KQOeCHSw2Bgb+qodWFLpUnNAJ391kvuZtDc04mPs8ETrGXlijyfhYIx5/'

b64_table_encoder = str.maketrans(b64_table, b64_table_encode)
b64_table_decoder = str.maketrans(b64_table_encode, b64_table)

def encrypt(input_text):
    return base64.b64encode(input_text.encode()).decode().translate(b64_table_encoder)

def decrypt(encrypted_text):
    return base64.b64decode(encrypted_text.translate(b64_table_decoder)).decode()

这个方案也可以随机生成一个密钥,强度比字母后移 x 位要稍微强一点。


lyym99 发表于 2024-3-26 10:39
还是不用偏移量比较通用,把
第2行def shift_letters(text, shift=1): 1改成0,
第21行unshifted_text = shift_letters(encrypted_text, -1)  -1改成0
头号玩家 发表于 2024-3-26 10:07
base64是编码,不是加密,你这应该是base64 + 凯撒
Henglie 发表于 2024-3-26 10:08
凯撒base?
Js_Aaron 发表于 2024-3-26 10:24
没有什么用,但是你写的代码好看,赞一下,表扬
jvmmqqll 发表于 2024-3-26 10:29
base64可以用于加密吗?
KKBon 发表于 2024-3-26 11:30
  试a-z几次后,就发现规律了
leigevip 发表于 2024-3-26 11:53
这算不上加密..base64是转码了
 楼主| 矢岛舞美 发表于 2024-3-26 11:57
KKBon 发表于 2024-3-26 11:30
试a-z几次后,就发现规律了

那没事啊,我可以把小写设定为-1,大写设定为+1,数字设定为-1,然后大写转小写,小写转大写,我就不信有人比我还无聊能解出来
kittylang 发表于 2024-3-26 12:23
这东西其实是经典加密算法了,凯撒密码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 10:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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