【问题标题】:How big of a key do I need? [closed]我需要多大的钥匙? [关闭]
【发布时间】:2017-08-09 06:58:08
【问题描述】:

我正在学习加密。我制作了一些键,编码了一个示例字符串(“1234 5678 9012 3456”),并且能够毫无问题地对其进行解码。第一部分工作正常。

然后我用我想要编码的真实数据样本进行了尝试,结果出现“数据对于密钥大小来说太大”错误。

字符串长度为 14041 个字符,最终产品可能更大,那么如何在没有 1024000 位密钥或类似疯狂的东西的情况下使其工作?

编辑:因为我已经从几个小时前打开它时学到了一些东西,所以我一直在使用的当前方法使用 RSA,因为这是 openssl_pkey_new 的默认设置。

基本上,我有一个移动应用程序,我希望能够以最安全的方式更新应用程序内的数据。我的老板对“云”有点偏执。我的想法是使用 RSA 或其他东西通过 web API 页面验证应用程序,从已编码的数据库中获取最新数据,并在应用程序中对其进行解码以进行存储,以避免不得不推出每次更新应用数据时(一年几次)都会更新一个新版本。
我的老板真的不喜欢它泄露数据的想法,所以我可以做任何事情来锁定它。

【问题讨论】:

  • 可能会有所帮助:stackoverflow.com/questions/7143514/…
  • 您使用什么密钥和密码?它几乎听起来像 RSA,但也可能是其他的。
  • @jww 这和我想的一样多:$keysize = 4096; $res=openssl_pkey_new(array('private_key_bits' => $keysize));
  • @CD001 这确实像我需要的,但我不确定我是否理解它:) 如果我没看错,我想生成一个 RSA 密钥,用我的openssl 私钥,用 RSA 密钥对文件进行编码,然后将 RSA 编码的文件和编码的密钥发送到目的地,密钥将被解码,然后文件将用该密钥解码?虽然在这种情况下它不会是一个文件,而是一个任意长的字符串。
  • 嗯,我只需要明智地点点头并说“可能” :) 我通常使用 GnuPG 进行加密,这是一种稍微不同的方法,因为您首先需要接收者的公钥......我可以'不记得我上次使用什么东西来直接与 OpenSSL 交互,而不是在 Apache 上生成自签名证书,所以我有点(非常)生疏……但这听起来是对的。

标签: php encryption php-openssl


【解决方案1】:

除非需要公钥/私钥对,否则不需要 RSA(非对称)加密。非对称数据大小被限制在小于密钥长度并且非常慢。

数据一般采用对称加密算法,如AES。

使用 RSA 加密的长度为 14041 字节的字符串需要超过 112K 位的密钥大小(不现实/不可能),AES 密钥通常为 128 或 256 位。

如果需要 RSA,策略是使用混合加密,其中数据使用 AES 和生成的随机密钥加密,然后使用 RSA 加密密钥。

【讨论】:

  • 经过进一步研究,我很确定我目前拥有的密钥是 RSA,因为这似乎是 openssl_pkey_new() 的默认值。我还在弄清楚这一点,所以我会稍微阅读一下 AES
  • 添加更多关于你想要完成的问题。查看更新的答案。
  • 好的,我添加了我的最终目标,对称加密看起来确实是要走的路。我找到了this page with an AES-256 example to replace mcrypt,但这个例子有这个警告:This library is unsafe because it does not MAC after encrypting,我什至不知道这意味着什么……我可能需要关闭这个问题并打开一个新的问题来提出正确的问题。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2011-07-21
  • 2014-02-18
  • 1970-01-01
  • 2013-10-27
  • 2013-01-10
相关资源
最近更新 更多