有没有办法在 php 中隐藏加密密钥或算法?

Posted

技术标签:

【中文标题】有没有办法在 php 中隐藏加密密钥或算法?【英文标题】:Is there any way to hide encryption key or algorythm in php? 【发布时间】:2021-09-07 19:51:54 【问题描述】:

我想将敏感的用户数据保存到我的 mysql 数据库表中。当然,我希望在保存到表之前对其进行加密。

我在网上看到很多教程,教程制作者在源代码中清楚地写了加密密钥和解密密钥,这对我来说没有意义。

如果有人可以访问数据库,如果源代码(包括代码并显示我们如何加密或解密数据)被黑客入侵,他/她看不到明文数据也没关系。所以他/她可以轻松读取我们的数据。

我的问题是,有没有办法隐藏加密密钥或加密算法,如果是,我该怎么做?

【问题讨论】:

你确定吗?如果您不知道如何加密此类数据,则应不要存储信用卡号。 我现在什么都没做,但我想了解它是如何制作的。 如果您的支付处理器支持,您应该订阅令牌服务。如果您想加密,您可以使用 HSM 安全地保护您的密钥 【参考方案1】:

恕我直言,您提议的做法是一个非常糟糕的主意。如果您将卡号存储在您的软件可以解密和使用它们的形式中,那么您将很难通过支付卡行业审核。如果网络蠕变破坏了您的系统,您将收到来自 Brian Krebs(来自 krebsOnSecurity.com)的可怕电话。请改用 stripe.com 或 Braintree。他们有非常称职的安全团队。它们为您提供安全令牌来代表您客户的卡号。

但这不是你问的。您想要一种可逆的方式来加密支付卡信息。

您可以使用私钥/公钥方案。要以最佳安全性执行此操作,您将在通常关闭并与网络断开连接的机器上生成密钥对。您将公钥复制到您的 Web 服务器,并使用它来加密支付卡数据。 (顺便说一下,禁止商家以任何形式存储 3 位 CVV 号码。)php 提供了openssl_public_encrypt 函数。

然后,当您需要解密卡号时,您将暂时打开安全机器并在那里解密卡号。你可以使用openssl_private_decrypt。

我曾经改造了一个支付处理方案,它完成了这个安全机器的事情,所以它改用了 stripe.com。使用该服务的一切都变得更容易了。

一般来说,为了存储敏感数据(严格监管的支付卡除外),您

    使用您的 DMBS 提供的静态加密方案来加密您的表空间。 阅读并遵循OWASP 建议,以保护您的网络应用。 在您的系统上执行渗透测试。 Burpscan 是您自己可以使用的多种工具之一。

【讨论】:

感谢您的回答 O.Jones。解释清楚简单。

以上是关于有没有办法在 php 中隐藏加密密钥或算法?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 有没有办法隐藏get的参数

php隐藏地址栏有方法么?

SVN over HTTPS:如何隐藏或加密URL?

知道明文和密文,如何确定是啥加密算法

aes加密安全吗

有没有办法隐藏或编码 url 路径?