我使用defuse/php-encryption的键组件生成用作优惠券代码的安全密钥。 键具有将生成的密钥打印为ascii-safe字符串的功能。我的用例中唯一的问题是它很长。
是否有任何安全方法可以减少密钥的长度,避免可能的冲突,并确保密钥仍然随机,因此无法猜出有效的密钥?
我正在考虑使用16个字符键来结束。
答案 0 :(得分:0)
是否有任何安全的方法可以减少密钥的长度,避免可能的冲突,并确保密钥仍然是随机的,因此无法猜出有效的密钥?
理论上,是的。 Since the data is hex-encoded,安全长度减少看起来像这样(使用constant-time base64url encoding):
<?php
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\ConstantTime\Hex;
/** @var Defuse\Crypto\Key $key */
// To save a shorter key:
$saved = $key->saveToAsciiSafeString();
$shortened = Base64UrlSafe::encode(
Hex::decode($saved)
);
var_dump($shortened);
// To restore the key:
$lengthened = Hex::encode(
Base64UrlSafe::decode($shortened)
);
$restoredKey = Key::loadFromAsciiSafeString($lengthened);
但是,这有点像XY问题。只需存储密钥,不要做任何危险的事情。