MySQL数据库have_openss_php – 如何在MySQL数据库中存储openssl_public_encrypt()输出?

我需要在

PHP中存储MySQL中加密但可恢复的(通过管理员)密码. AFAIK,最直接的方法是使用openssl_public_encrypt(),但我不确定需要什么列类型.我可以根据密钥的大小和输入对加密输出的最大长度做出任何可靠的判断吗?

或者我被迫使用一个巨大的领域(例如BLOB),并希望它一直有效?

最佳答案 openssl_public_encrypt函数将可以加密的数据大小限制为密钥的长度,如果使用填充(推荐),则会丢失额外的11个字节.

However, the PKCS#1 standard, which OpenSSL uses, specifies a padding scheme (so you can encrypt smaller quantities without losing security), and that padding scheme takes a minimum of 11 bytes (it will be longer if the value you’re encrypting is smaller). So the highest number of bits you can encrypt with a 1024-bit key is 936 bits because of this (unless you disable the padding by adding the OPENSSL_NO_PADDING flag, in which case you can go up to 1023-1024 bits). With a 2048-bit key it’s 1960 bits instead.

当然,你永远不应该禁用填充,因为这将使相同的密码加密到相同的值.

因此对于1024位密钥,最大密码输入长度为117个字符.

对于2048位密钥,它是245个字符.

我不是100%确定输出长度,但是一个简单的跟踪应该确认这一点,输出是一个简单的keylength函数,所以对于一个2048位的密钥,我怀疑它是256字节.

您应该使用具有所需长度的二进制字符串来存储密码.

出于速度原因,最好在场地上使用有限长度的索引.

不要使用blob(!),因为这会减慢速度,没有任何好处.

CREATE TABLE user

id unsigned integer auto_increment primary key,

username varchar(50) not null,

passRSA binary(256), <

index ipass(passRSA(10)) <

) ENGINE = InnoDB

向索引添加额外的字节只会减慢速度并增加索引文件,但没有任何好处.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值