我正在使用加密数据库...我一直在使用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)ýë®^ A〜/ U *£
但这是什么数据类型?在文档上:http://www.php.net/manual/en/function.mcrypt-encrypt.php该行显示为:
将字符串转换为键
使用十六进制指定键
所以我的问题是这是什么数据类型?我知道这是在ASCII范围内,但据我所知,这就是..此外,一个成功的答案也将帮助我创建另一个不是实际文档指定的密钥
答案 0 :(得分: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分钟的工作)将完全解释你的上述问题。
答案 1 :(得分:1)
回答您的问题..提交的唯一可行的可行数据类型是字符串。正如你在评论中所说:
我已经想过使用mcrypt的IV函数然后使用bin2hex, 在包函数的第二个参数中使用它似乎工作 没有失败..但是,我的整体问题是如何验证: ¼°K~:ØμGcï¼U«à)ýë®^ A~ /û*£降至特定数据类型
您已经回答了如何为pack('H*')
创建可接受的格式,但就验证而言:
if (is_string($Var)){
}
是否可行,因为这是它的提交方式。它不是bool,hex,binary,int ..所以唯一有效的验证方法是将其验证为字符串。