我正在开发一个加密数据库...我一直在使用 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/