php - 在公共(public)私钥加密中创建自己的字符串作为私钥?

标签 php security encryption

我们希望对敏感数据进行加密并存储在数据库中。当用户查看表单时,如果他们被授权查看这些敏感数据,他们将拥有一个额外的“密码”,可以解密其 session 的数据。

我正在研究公钥/私钥加密,并使用人类友好的密码来生成私钥(sha 哈希等)和相应的公钥。公钥将用于加密输入的新敏感数据。如果用户需要查看数据,他们将输入密码(“私钥”)(除了通常的登录帐户和权限设置之外)。这也避免了将私钥/密码存储在任何服务器上。

仅使用任何随机字符串作为私钥是行不通的:

-----BEGIN PRIVATE KEY-----
sha_hash('myPassword'.$salt)
-----END PRIVATE KEY-----   

因此,目前用户必须将私钥文本(通过 openssl 等创建)复制粘贴到提示中才能解密信息。这很可能意味着人们将此 key 存储在文件或电子邮件中。

这样的事情可能吗?创建我自己的私钥字符串,然后从中创建公钥?

最佳答案

Is something like this possible? Create my own private key string and then create a public key from that?

是的,抽象地说这是可能的。不,这对于 RSA 来说并不是小事,它需要素数。

示例来自 Halite (不使用 RSA,并且没有 RSA 效果更好):

$salt = random_bytes(16); // Do this once, then make it a constant
$keyPair = KeyFactory::deriveEncryptionKeyPair(
    "My password",
    $salt,
    false, // This isn't a legacy key
    KeyFactory::SENSITIVE
);
$privateKey = $keyPair->getSecretKey();
$publicKey = $keyPair->getPublicKey();

var_dump(bin2hex($privateKey->getRawKeyMaterial()));
var_dump(bin2hex($publicKey->getRawKeyMaterial()));

示例输出:

string(64) "030d6e4c462b2d15a48441cead4d1b9d0ae4a2ea6926a78e180a8b7d3ce6508f"
string(64) "189c86722bc81550186fd0eaba2a97d2e6c0a9c6f63a098cc1495309c7f9a71e"

这些是 Curve25519 上的 ECDH key ,由 libsodium 提供。

关于php - 在公共(public)私钥加密中创建自己的字符串作为私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056984/

相关文章:

Azure Web App 仅通过应用程序网关并禁用直接访问

php - 如何通过其自己的加密值更新每一行

amazon-web-services - 所有 s3 存储桶上的 AWS s3 存储桶批量加密

Java DES/ECB/PKCS5Padding加密值不一样

php - 我如何导入 SQLite db3 文件

php - 将原始数据类型传递给函数参数

PHP:字符串索引

php - 3 sql inner joined tables,现在如何计算其中的总行数

javascript - 防止javascript中的url受到xss攻击

javascript - 使用 "new Function(...)"的安全考虑(在渲染期间,表达式来 self 的 Javascript 源)