我见过很多关于如何通过OpenSSL使用AES和对称加密的例子。但我使用的是非对称加密。我的webapp正在存储一些使用公钥加密的敏感数据,如果管理员可以提供私钥密码,那么以后只能用私钥解密。
我的实现运行良好,但是,我注意到非常小的输入会产生相当大的加密结果。例如,16个字符的输入变为288字节加密(它解密为原始的16个字符)。由于这些加密结果存储在数据库表中,我希望实现更接近输入大小的加密值。也需要可预测的存储长度。
我正在使用RSA公钥/私钥,但默认情况下PHP的OpenSSL实现使用什么密码?我没有找到使用公钥/私钥时如何指定密码的单个示例,openssl_public_encrypt函数不允许指定其中一个cipher constants。我是否应该在生成pub / pri键时使用openssl_pkey_new来指定密码?
答案 0 :(得分:0)
AES是一种对称加密算法,它不支持公钥/私钥对。谁能加密也可以解密密文。
可以将AES与非对称算法(如RSA)结合使用以获得混合方案:一个使用RSA加密(随机)AES密钥,然后使用AES加密实际数据。尽管如此,您仍然会有RSA开销,其最小密文大小约为RSA模数的大小(因为这是RSA的输出)。
我认为这实际上是您的OpenSSL功能所做的,可能取决于密钥类型。
还有其他公钥方案,特别是那些基于椭圆曲线的公钥方案,它们允许较小的开销,以实现与RSA类似的安全性。 (但我不知道OpenSSL或其PHP绑定是否支持这些。)
答案 1 :(得分:0)
我建议创建RSA私钥和公钥。见This great article