【问题标题】:How to encrypt strings in python without a python package [closed]如何在没有python包的情况下加密python中的字符串[关闭]
【发布时间】:2021-12-30 12:56:45
【问题描述】:

我需要加密单数字符串,并将它们存储起来以供以后用作文本文件。期望的输出:

Enter string: I like to eat muffins
Enter decryption password: password12345
Enter save name: muffin

然后检索数据:

file: muffin
password: password12345
str: I like to eat muffins

我需要将所有这些信息保存为加密文本文件,而不使用任何预构建的包。我还需要一种方法来解密文本文件并提示用户输入预先输入的密码。该文件看起来像一个由数字和字符组成的随机数组,上面输入的所有信息都将存储在其中,以便可以将其发送给使用相同程序的另一个人,他们必须有密码(存储在文件中)来读取它。

【问题讨论】:

  • 好的,这不是一项艰巨的任务。到目前为止你做了什么?
  • 您希望实施哪种类型的加密?你试过什么?
  • Stack Overflow 不是您的个人代码编写服务。向我们展示您迄今为止编写的代码以满足您所描述的要求,并简要说明您具体遇到的问题。 How to Ask
  • 我的问题是我不能使用任何预构建的加密模块,比如 fernet。
  • Are you aware of the grave security risks of trying to roll your own cryptography suite? 为什么你不能使用任何预先构建的东西(因此可能在数学上被证明是安全的)?对我来说,这似乎是一个相当随意的要求,除非您是一个密码学家/研究人员团队,精通以完全安全的方式执行此类任务所需的细微差别。无论如何,到目前为止你写了什么?我们肯定不会完全为您设计/实施加密方案。

标签: python string encryption server


【解决方案1】:

我假设您只是在寻找一些简单的加密来演示这些概念,而不是像现代、安全的加密套件那样复杂。

此代码在您的明文和您的密钥之间进行简单的异或加密。如果有足够的文字,这很容易破解,但它显示了概念。

import sys

def encode():
    cleartext = input("Enter string: ")
    key = input("Enter decryption password: ")
    filename = input("Enter save name: ")

    reps = (len(cleartext)-1)//len(key) +1

    a1 = cleartext.encode('utf-8')
    key = (key * reps)[:len(cleartext)].encode('utf-8')
    cipher = bytes([i1^i2 for (i1,i2) in zip(a1,key)])
    open(filename,'wb').write(cipher)


def decode():
    key = input("Enter decryption password: ")
    filename = input("Enter save name: ")

    cipher = open(filename,'rb').read()
    reps = (len(cipher)-1)//len(key) +1
    key = (key * reps)[:len(cipher)].encode('utf-8')
    clear = bytes([i1^i2 for (i1,i2) in zip(cipher,key)])
    return clear.decode('utf-8')

if sys.argv[1] == "-d":
    print(decode())
elif sys.argv[1] == '-e':
    encode()
else:
    print("What?")

【讨论】:

  • 我正在写一个答案,但蒂姆打败了我。在开始使用密码学时,理解语言很重要。 Here is a good resource 带有常用术语及其定义。
  • 这正是我想要的。非常感谢@Tim Roberts
  • 当我使用"èèèèèèè0123456789" 作为明文,"a" 作为密码时。我得到的是"èèèèèèè012"。我想知道您是否需要在计算 reps 之前将所有内容(明文和密码)转换为 bytes
  • 是的。作为美国人,我自动假设所有 ASCII 字符。 ;)
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多