应用程序是用户在其 PC 上运行的常规可执行程序。它没有数据库,但是它确实有用户不能更改的数据。假设文件中有一个 JSON 对象,models
程序在启动时读取该对象并在进一步的工作中使用它。由于 JSON 是原始文本,用户将能够打开此文件并更改其中的任何内容。目的是使得没有密码就无法执行此操作,但仍然允许程序读取和解释文件。文件的内容对于用户来说应该是难以理解的,但是如果他检查它并恢复存储在那里的原始文本,那就没问题了。
plain_text = 'plain text'
def encrypt_string(plain_text: str, password: str) -> str:
"""
Принять новый текст для записи в файл и зашифровать его
"""
...
def decrypt_string(encrypted_text: str) -> str:
"""
Расшифровать содержимое файла
"""
...
非对称加密是不言而喻的。文本用私钥加密,用公钥解密。两个密钥都存储在程序中,但私钥用密码加密。在尝试实现这样的事情时,我遇到了问题:
RSA算法的经典概念是使用公钥加密,使用私钥解密。这正是它在库中的实现方式
cryptography
,没有其他不同的方法。虽然从数学上来说可以交换公钥和私钥,但是却没有办法这样做。
没有办法在没有密码的情况下序列化私钥,例如自己实现对称密码加密。
私钥加密和公钥解密用于生成签名,但如果没有散列则无法创建签名。当执行逆向操作时,只需调用签名验证函数,该函数会将传递的字符串与加密的哈希值进行比较。
我对这个问题的看法正确吗?您能提出什么解决方案?
这部分可以或多或少诚实地实现:
假设我们在所选操作系统的生态系统中使用签名的应用程序(python 应用程序,可能需要在签名的应用程序中进行编译或包含签名的 python)实现点 1。 P.4 实现WEB服务或者Telegram机器人。
作为一个糟糕的选择,签名密钥是通过一种或另一种本地算法方式从密码中获得的,这是......虽然从技术上讲是可行的,比如,通过在根公钥上为从密码获得的私钥获得的公钥颁发证书。
另外,第 3 点虽然应用非常广泛,但由于存在多种不同的方法来影响单个操作员,因此也受到了批评
if
。这是一个模糊的条件,很难形式化。
一个简单的选择:我们签署另一行,并使用签署此行的结果的哈希值作为主行的加密密钥(类似于受控的“一次性”密钥)。那些。在应用程序中附加步骤:
2.1 检查附加行的签名;
2.2 从该签名中我们获得主线的解密密钥;
2.3 解密主字符串并将其与附加字符串连接起来;
接下来是同样臭名昭著的点3等等。
原则上,您对问题的陈述与对秘密投票问题的陈述非常接近,例如,您可以查看:https://ru.m.wikipedia.org/wiki/Протоколы_тайного_волокона。另一件事是,并非所有这些协议都是好的,并且并非所有好的协议都可以使用标准加密库来实现。