<?php
header('Content-Type: text/html; charset=utf-8');
$csr = $_POST['csr'];
$key = $_POST['key'];
$crt = $_POST['crt'];
if (!$csr || !$key || !$crt) {
die('Files not specified. Go back and try again');
}
$hashCsr = exec("openssl req -in $csr -pubkey -noout -outform pem | sha256sum");
$hashKey = exec("openssl pkey -in $key -pubout -outform pem | sha256sum");
$hashCrt = exec("openssl x509 -in $crt -pubkey -noout -outform pem | sha256sum");
echo "<p><strong>File:</strong> $csr <strong>Hash:</strong> $hashCsr</p>";
echo "<p><strong>File:</strong> $key <strong>Hash:</strong> $hashKey</p>";
echo "<p><strong>File:</strong> $crt <strong>Hash:</strong> $hashCrt</p>";
if (($hashCsr === $hashKey) && ($hashCsr === $hashCrt) && ($hashKey === $hashCrt)) {
echo "<p style='color: green;'>Certificates match!</p>";
}
else {
echo "<p style='color: red;'>Certificates do NOT match!</p>";
}
?>
我看到此代码以DD / MM / YYYY格式接收生日,但是我想知道放置'/'的含义是什么,我知道如果没有这个,由于字符'/'会导致输入错误。那到底是什么意思?
答案 0 :(得分:1)
遇到无法理解的代码并且正在从库中调用某个函数时,您的首要任务是研究该函数的文档。对于C标准函数,只需搜索函数名称即可。
在这种情况下,cppreference是一个很好的参考(不要被网站名称所误导,这是C参考,而不是C ++参考)。该函数的定义为
int scanf( const char *format, ... );
现在查找format
参数的参数说明:
指向以空值结尾的字符串的指针,该字符串指定如何读取输入。
后续文本说明了如何读取格式字符串。特别是:
格式字符串中的
- […]字符[
%
除外]消耗了与输入流完全相同的一个字符,或者如果流中的下一个字符不相等则导致函数失败。- 转换规范[采用以下格式]
- 介绍性字符
- 转换格式说明符
d
-匹配十进制整数。
换句话说:
scanf
根据格式字符串解析文本输入。在格式字符串中,/
实际上在用户输入中匹配斜杠。 %d
匹配一个十进制整数。
因此,scanf("%d/%d/%d", …)
将匹配由三个用斜杠分隔的整数组成的字符串,并将数字值存储在指向的变量内。
答案 1 :(得分:0)
只是日期格式的分隔符。当某些函数搜索那些/时,必须引发该错误。
答案 2 :(得分:0)
scanf的第一个参数是一个字符串,该字符串指定要用于在其他自变量中存储信息的字符串的格式。您可以将这种格式的字符串视为一种模式:%d表示整数,没有'%'表示仅需完全匹配字符。
答案 3 :(得分:0)
预计输入将提供04/07/2019
之类的内容。
如果仅提供输入04072019。单独currD保留值04072019
,因为未初始化,currM和currY可能会浪费值。
答案 4 :(得分:0)
它期望输入的格式为三个整数,两个整数之间用两个斜杠(“ /”)隔开。例如:10/11/1999
。