php - 使用包 ('H*' 验证字符串)

标签 php

我正在开发一个加密数据库...我一直在使用 m_crypt 函数..我已经成功地得到了我的加密/解密方法..但是问题在于创建我的 OO 类来提供此功能..我有以下内容:

class Encryption {
    public function __construct($Hex = null){
        if (isset($Hex)){
            if (ctype_xdigit($Hex)){
                echo "Is Hex";
            }
            if (preg_match('~^[01]+$~', $Hex)) {
                echo "Is Binary";
            }
        }
    }
}

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
$Class_OO = new Encryption($key);

echo 用于测试目的。但我想验证它是否为有效的十六进制/二进制或该字符串的数据类型。

执行:

print_r($key);

返回以下内容:

¼°K~:صGcï¼U«à)ýë®^A~/û*£

但这是什么数据类型?在文档上:http://www.php.net/manual/en/function.mcrypt-encrypt.php该行显示:

convert a string into a key

key is specified using hexadecimal

所以我的问题是这是什么数据类型?我知道这是在 ASCII 范围内,但据我所知,这就是。此外,成功的答案还将帮助我创建另一个 key ,该 key 不是实际文档指定的 key

最佳答案

您的 $key 是 pack 的返回值,在本例中是一个二进制字符串(本质上是原始二进制值)。请参阅文档中的第一行了解 pack() 函数返回值:http://php.net/manual/en/function.pack.php

Pack given arguments into binary string [emphasis added] according to format.

您通常会在尝试任何类型的输出之前对二进制字符串进行 Base64 编码,因为根据定义,二进制字符串可能(并且经常)包含不可打印的字符,或更糟糕的是 - 终端控制/转义序列可能会破坏您的屏幕。

将其想象为打印原始 Word 或 Excel 文件:您可能会看到可识别的值(尽管在本例中偶尔会看到字母数字),但也会看到很多垃圾。

Base64 编码是一种以安全方式检查这些字符串的技术。

但是你的问题意味着你正在非常新地进入这个领域。您可能应该在这里查看 Matasano 加密货币教程:http://www.matasano.com/articles/crypto-challenges/ 。这是一个很好的起点,完成其中的练习#1(可能需要 20 分钟)将完全阐明您上面的问题。

关于php - 使用包 ('H*' 验证字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952876/

相关文章:

php - 测量服务器正常运行时间

php - Laravel 5 类管理员不存在

php - 使用循环从多个 PHP 回显属性设置 CSS x 和 y

php - Yii 确认对话框扩展

php - 无法扩展 Zizaco\Confide\Confide 用户

php - Laravel 5 - 多语言网站(LTR 和 RTL)

php - 如何根据数组值在图像之间切换

php - 将事务用于具有相关结果的查询

php - 连接PHP与Android检查Mysql数据库中是否存在值

PHP 列出文件夹中带有 <a> 标签的所有 HTML 文件