安全地减少defuse / php-encryption生成密钥的长度

时间:2017-07-18 17:09:38

标签: php encryption

我使用defuse/php-encryption组件生成用作优惠券代码的安全密钥。 具有将生成的密钥打印为ascii-safe字符串的功能。我的用例中唯一的问题是它很长。

是否有任何安全方法可以减少密钥的长度,避免可能的冲突,并确保密钥仍然随机,因此无法猜出有效的密钥?

我正在考虑使用16个字符键来结束。

1 个答案:

答案 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问题。只需存储密钥,不要做任何危险的事情。