RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1604714
Accepted
maestro
maestro
Asked:2025-01-13 14:41:59 +0000 UTC2025-01-13 14:41:59 +0000 UTC 2025-01-13 14:41:59 +0000 UTC

如何在我的应用程序中存储一个可以读取但没有密码就无法更改的字符串?

  • 772

应用程序是用户在其 PC 上运行的常规可执行程序。它没有数据库,但是它确实有用户不能更改的数据。假设文件中有一个 JSON 对象,models程序在启动时读取该对象并在进一步的工作中使用它。由于 JSON 是原始文本,用户将能够打开此文件并更改其中的任何内容。目的是使得没有密码就无法执行此操作,但仍然允许程序读取和解释文件。文件的内容对于用户来说应该是难以理解的,但是如果他检查它并恢复存储在那里的原始文本,那就没问题了。

plain_text = 'plain text'
def encrypt_string(plain_text: str, password: str) -> str:
    """
    Принять новый текст для записи в файл и зашифровать его
    """
    ...

def decrypt_string(encrypted_text: str) -> str:
    """
    Расшифровать содержимое файла
    """
    ...

非对称加密是不言而喻的。文本用私钥加密,用公钥解密。两个密钥都存储在程序中,但私钥用密码加密。在尝试实现这样的事情时,我遇到了问题:

  1. RSA算法的经典概念是使用公钥加密,使用私钥解密。这正是它在库中的实现方式cryptography,没有其他不同的方法。

  2. 虽然从数学上来说可以交换公钥和私钥,但是却没有办法这样做。

  3. 没有办法在没有密码的情况下序列化私钥,例如自己实现对称密码加密。

  4. 私钥加密和公钥解密用于生成签名,但如果没有散列则无法创建签名。当执行逆向操作时,只需调用签名验证函数,该函数会将传递的字符串与加密的哈希值进行比较。

我对这个问题的看法正确吗?您能提出什么解决方案?

python
  • 1 1 个回答
  • 88 Views

1 个回答

  • Voted
  1. Best Answer
    Serge3leo
    2025-02-13T15:00:12Z2025-02-13T15:00:12Z

    如何在我的应用程序中存储一个可以读取但没有密码就无法更改的字符串?

    这部分可以或多或少诚实地实现:

    1. 我们确保申请的完整性;
    2. 该应用程序包含一个公钥;
    3. 我们在使用此行之前检查其签名;
    4. 我们为用户提供输入密码即可签署变更的服务。

    假设我们在所选操作系统的生态系统中使用签名的应用程序(python 应用程序,可能需要在签名的应用程序中进行编译或包含签名的 python)实现点 1。 P.4 实现WEB服务或者Telegram机器人。

    作为一个糟糕的选择,签名密钥是通过一种或另一种本地算法方式从密码中获得的,这是......虽然从技术上讲是可行的,比如,通过在根公钥上为从密码获得的私钥获得的公钥颁发证书。

    另外,第 3 点虽然应用非常广泛,但由于存在多种不同的方法来影响单个操作员,因此也受到了批评if。

    ...该程序仍然必须能够读取和解释该文件。文件的内容对于用户来说应该是难以理解的,但如果他检查它并恢复存储在那里的原始文本,那就没问题了......

    这是一个模糊的条件,很难形式化。

    一个简单的选择:我们签署另一行,并使用签署此行的结果的哈希值作为主行的加密密钥(类似于受控的“一次性”密钥)。那些。在应用程序中附加步骤:

    2.1 检查附加行的签名;

    2.2 从该签名中我们获得主线的解密密钥;

    2.3 解密主字符串并将其与附加字符串连接起来;

    接下来是同样臭名昭著的点3等等。

    原则上,您对问题的陈述与对秘密投票问题的陈述非常接近,例如,您可以查看:https://ru.m.wikipedia.org/wiki/Протоколы_тайного_волокона。另一件事是,并非所有这些协议都是好的,并且并非所有好的协议都可以使用标准加密库来实现。

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5