我正在加密数据库…我一直在使用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
s用于测试目的。但我想验证它是一个有效的十六进制/二进制或者这个字符串的数据类型。
print_r($key);
返回以下内容:
¼°K ~:صGci¼U«一)你们®^ ~/U *£
但是这是什么数据类型呢?在文档中:http://www.php.net/manual/en/function.mcrypt-encrypt.php该行如下所示:
将字符串转换为键
键使用十六进制
指定
我的问题是这是什么数据类型?我知道这是在ASCII范围内,但就我所知…此外,成功回答这个问题还将帮助我创建另一个键,而不是实际文档
$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分钟的工作)将完全阐明你上面的问题。
关于你的问题…唯一可行的提交数据类型是字符串。正如你在评论中所说:
我已经计算了使用mcrypt的IV函数,然后使用bin2hex,在pack函数的第二个参数中使用这个似乎有效没有一次失败……但是,我的总体问题是如何验证:¼°K ~:صGci¼U«一)你们®^ ~/U *£下来到一个特定的数据类型
您已经回答了如何为pack('H*')
创建可接受的格式,但就验证而言:
if (is_string($Var)){
}
是正确的方法,因为它是这样提交的。它不是bool,十六进制,二进制,int。所以唯一有效的验证方法是将其作为字符串进行验证。