2

我正在研究一个加密的数据库...我一直在使用 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);

s 用于测试目的。但我想将其echo验证为有效的十六进制/二进制或此字符串的数据类型。

执行:

print_r($key);

返回以下内容:

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

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

将字符串转换为键

使用十六进制指定密钥

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

4

2 回答 2

2

您的 $key 是 pack 的返回值,在这种情况下是二进制字符串(本质上是原始二进制值)。pack()函数返回值见文档第一行:http: //php.net/manual/en/function.pack.php

根据格式将给定的参数打包成二进制字符串[强调添加] 。

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

将其想象为打印原始 Word 或 Excel 文件:您可能会看到可识别的值(尽管在这种情况下偶尔会出现字母数字),但也有很多垃圾。

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

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

于 2013-06-06T15:04:11.933 回答
1

回答您的问题。提交的唯一可行的可行数据类型是字符串。正如您在评论中所说:

我已经想到使用 mcrypt 的 IV 函数然后使用 bin2hex,在 pack 函数的第二个参数中使用它似乎可以正常工作。但是,我的总体问题是如何验证:¼°K~:صGcï¼U«à) ýë®^A~/û*£ 到特定的数据类型

您已经回答了如何创建可接受的格式,pack('H*')但就验证而言:

if (is_string($Var)){

}

是要走的路,因为这就是它的提交方式。它不是 bool、hex、binary、int.. 所以唯一有效的验证方法是将其验证为字符串。

于 2013-06-07T00:30:37.823 回答