用PHP如何实现数字签名啊··跪求高人指点···

作者&投稿:戈鸿 (若有异议请与网页底部的电邮联系)
php怎么用~

PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

PHP的特性包括:
1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,
PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;
PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。
3. PHP支持几乎所有流行的数据库以及操作系统。
4. 最重要的是PHP可以用C、C++进行程序的扩展!

PHP中“?:”指的是三目运算符。
三目运算符,也称为条件运算符,它是计算机语言的重要组成部分。它是唯一具有3个操作数的运算符,因此有时称为三元运算符。通常,三目算子的组合是右边界。
三目运算符提供了一种表达简单if-else语句的简便方法。运算符由以下格式的问号(?)和冒号(:)组成:表达式?表达式:表达式;一条语句称为条件表达式,由3个子表达式组成,并使用问号?和冒号:分开。
条件表达式中问号之前的部分是要测试的条件。这就像if语句括号中的表达式。如果条件为真,则执行?之间的语句。和:;否则,执行以下部分。如果您认为有帮助,可以在子表达式两边加上括号

扩展资料:
函数的操作规则
1、对于条件表达式b? x:y,首先计算条件b,然后判断。如果b的值为true,则计算x的值,并且运算的结果为x的值;否则,计算出y的值,并且运算的结果是y的值。
2、条件表达式永远不会同时计算x和y。条件运算符是右关联的,即从右到左分组。例如,一个? b:c? d:e将被执行为? b:(c→d:e)。
3、可以理解为:条件?结果1:结果2,在里面?该数字是格式要求。也可以理解为条件是否为真,条件成立为结果1,否则为结果2。
参考资料来源:百度百科-三目运算符

以下是资料:

php中数字签名与校验

1. 先用php生成一对公钥和私钥

$res = openssl_pkey_new();
openssl_pkey_export($res,$pri);
$d= openssl_pkey_get_details($res);
$pub = $d['key'];
var_dump($pri,$pub);

输出依次为私钥和公钥的pem字串,如:

string(916) "-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKs124okAnX5jh1Q
wsETi80b4ZyYlYUSsAtvS7ZG+GSLAox24TKNwWIy5cUdKfK/5QEJjZ0S8LjRSYCG
to9LkwQTQrKY8BBXVCQQS3VXRqz4on9bmcGSyLMK6vQxt9NnJpk6aBmJE7z35+8z
TTLwdUbYaMAcYqrsYDfgBSNBgwbDAgMBAAECgYBvolJfpFMmcW3El6AlHIWPW5qj
7KmxdxnqmssXMvdLN4iV5f24ZM2vJdjDydxMN+st3fjEblEfcPcoIq5uiKx2bnO3
f9g0yt+qUoXdz4LK6jV1NfuAZDcnBm7CXfE7BDREgyiRg4ZXIvp4L0Y2zBMdFTmg
LKkXb2M1P3pK53UbwQJBANupqPXFQjdHvAa3voT+UI8OhmLbw/Vyh6Ii1glwMfyq
VS2lAakj9d1hqLYZvw+eNeZBnzZNPuMJg5aj/WKUqasCQQDHiFLS7Yb1rbhfjmRt
ZL4zXuvX1hVjTNo2TeZwPniGpYa+QHcauDDep5C9q//n+D+ZtkbkECxpOVhrUHSI
KO9JAkEApl3lHd98uymVevEHVurWUMMLfSw9SlSn7WC9AwD6mwbW5G8oxtX5jOY+
RU1Sq52D7RSeZR40FvhJtXoWmudFaQJAc8E+a2epF/YENEtjL6N2RE8Y+0oTdlwr
a72dphhXy6VTmiPD9RhOIZ2MdrzF5Uk7fG0mi0Bmw1SlWvx93lABIQJBALXPeoNa
b4dQkRkfqCHtyrWOeRcC1Y6FyTfNj+cRBzdIcmFc21hxj6HKy2M6/XGI3rAE5L+B
mmlSmN1enhoCUqc=
-----END PRIVATE KEY-----
"
string(272) "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrNduKJAJ1+Y4dUMLBE4vNG+Gc
mJWFErALb0u2RvhkiwKMduEyjcFiMuXFHSnyv+UBCY2dEvC40UmAhraPS5MEE0Ky
mPAQV1QkEEt1V0as+KJ/W5nBksizCur0MbfTZyaZOmgZiRO89+fvM00y8HVG2GjA
HGKq7GA34AUjQYMGwwIDAQAB
-----END PUBLIC KEY-----
"

2. 保存好自己的私钥,把公钥可以公开给别人。如果需要对某数据进行签名,证明那数据是从你这里发出的,就需要用私钥:

$res = openssl_pkey_get_private($pri);
if (openssl_sign('hello', $out, $res))
var_dump(base64_encode($out));

上例中 $pri 为自己的私钥,'hello' 为待签名的数据,如果签名成功,最后输出为base64编码后的签名,如:

j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJTJ4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=

3. 别人收到你的数据 'hello' 和签名字串,想验证这是从你发来的数据的话,用你公开的公钥验证:

$sig = base64_decode($sig);
$res = openssl_pkey_get_public($pubkey);
if (openssl_verify('hello', $sig, $res) === 1)
; // 通过验证

上例中刚开始的 $sig 为之前你base64编码过的签名, $pubkey 为你的公钥

php中这种签名使用的是RSA算法;数字签名可以在 单点登录 等系统中派上用场。


PHP 如何显示大数字,防止显示为 科学计数法
public function onTask($serv, $task_id, $from_id, $task_data){ area = $task_data;\/\/参数是地区编号 rows = 50; \/\/每页多少条 \/\/主库地址,根据参数地区($area)编号切换master数据库连接 \/\/从库MySQL实例,根据参数地区($area)编号切换slave数据库连接 ...

php向一个空数组中添加1000个不重复的数字,要求:数字需要在0-3000中产...
\/\/ 1、首先定义一个空的目标数组 arr = [];\/\/ 2、开始for循环 for ($i = 0; $i < 1000; ) { \/\/ 3、获取0~3000之间的随机数 r = rand(0, 3000);\/\/ 4、判断该随机数是否存在目标数组中 if (!in_array($r, $arr)) { \/\/ 5、如果不存在,则将该随机数添加到目标数组中 arr...

PHP 从大到小输出数字,要输出纯数字?
a=1;b=2;c=3;if($a<$b){$d=$a;$a=$b;$b=$d;} if($b<$c){$d=$b;$b=$c;$c=$d;} if($a<$b){$d=$a;$a=$b;$b=$d;} echo $a.$b.$c;

php中,如何将一串数字分割成一个个,并计算他们的个数
需要准备的材料分别是:电脑、php编辑器、浏览器。1、首先,打开php编辑器,新建php文件,例如:index.php。2、在index.php中,输入代码:a = 19841231;$b = [];$c = [];while($a > 0) { t = $a % 10;a = intval($a \/ 10);b[] = $t;if (!isset($c[$t])) { c[$t] ...

使用php语言编写代码,定义一个数组,填充10个100以内随机数,并按从小到...
因为语言不同,代码就不贴了,思路如下:定义数组,因为10个是确定的,所以用第一个for循环循环十次,每次都random出数字赋值给数组,之后冒泡排序,因为冒泡法的循环次数不定,用while内嵌for循环:while(flag){ flag=false;for(i=0;i<10;i++){if(a[i]>a[i+1]){a[i]=a[i]+a[i+1];a...

如何用php代码实现:随机生成不重复的10个范围在1到100的尾数是3或8...
...你写的是什么?你的思路是 先随机得到一个1-100的i 然后截取判断,再在判断里循环?先改思路,在不考虑效率的情况下,先循环 arr=Array();while(count($arr)<10){ temp=rand(1,100);\/\/判断末尾数字 \/\/判断是否数组中存在,不存在就$arr[]=$temp;存在就continue;} 如果考虑效率,则修改...

Php设计模式如何实现(php设计模式如何实现数据分析)
集合不一定是均一的图形用户界面框架中的Window对象可以收集任意数量的控制对象-MenuSlider和Button并且集合的实现可以有多种方式PHP数字是一个集合但也是一个散列表一个链接列表一个堆栈以及队列 问题 如何操纵任意的对象集合? 解决方案 使用迭代器模式来提供对集合内容的统一存取 你可能没有意识到这一点但你每天都在...

php程序如何产生随机数?
mt_rand — 生成更好的随机数 它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。所以建议楼主用这个函数 比rand要快 int mt_rand ([ int $min ], int $max ) $min为做小值 $max为最大值 <?php echo "";for ($i=0;$i<2;$i++) \/\/ 外层循环控制行数 { echo ""...

用php代码实现将一个数组的值排列顺序改为第一个数字最大,第二个...
<?php\/\/自定义排序函数 my_sortfunction my_sort($arr){ rsort($arr); \/\/从大到小排序 $new = array(); $count = count($arr); for($i=0; $i<$count; $i++){ $new[] = $arr[$i]; if($count - $i - 1 > $i){ $new[] = $arr[$count - ...

"["1","2"]"怎么取出数字php7不u
用“preg_match”函数从字符串中提取数字。1、使用“preg_match”函数从字符串中提取数字出来;2、使用PHP内置的“in_array”方法将字符串中出现的数字都提取出来,并拼接在一起;3、使用“is_numeric”方法。

于都县19719869087: php如何做数字签名? -
集婕消咳: 概括就是:“学会用PHP的openssl扩展!!” 1、先用openssl_pkey_new()函数产生一个私钥pri_key, 2、用openssl_csr_new()函数以私钥pri_key 产生一个信用证csr 3、用openssl_sign()函数以私钥pri_key对一段数据data产生一个数...

于都县19719869087: PHP怎么实现Tag - 技术
集婕消咳: 文章表(文章ID[,...])标签表(标签ID, 标签名)关系表(关系ID, 文章ID, 标签ID)以新增一篇文章为例,指定两个tag,约定以半角逗号隔开:A,B.其中,A已存在标签表,B不存在.[ol][*][*]$tags = explode(,', $_POST[\'article_tag\']);...

于都县19719869087: PHP如何实现tag cloud?
集婕消咳: Ho letto un articolo interessante sul blog di Html.it e ho riscritto lo scriptiono in PHP, spero posso tornare utile a qualcuno. $db = @mysql_connect(”###.###.###.###”,”root”,”"); @mysql_select_db(”Sql78257_1″,$db); $risTags = @mysql_...

于都县19719869087: blog中的tag用php怎么实现 -
集婕消咳: tag简单理解就是搜索标题关键词.当然tag是单独的字段.文章添加tag.如tag啦啦啦.存入tag表中,并与文章id关联.查询tag时,啦啦啦的tag id是1.直接查询tag为啦啦啦的所有文章 localhost/tag.php?id=1; select * from tag where id =1 $result = 啦啦啦 select * from arclist where tag = $result

于都县19719869087: PHP怎么实现nc的这种操作 -
集婕消咳: <?php$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket, '19.133.70.56', 5000);$attfile = 'd:/1.pdf';$buf = file_get_contents($attfile);$fsize = filesize($attfile);$sn = socket_send($socket, $buf, $fsize, MSG_OOB); echo $sn;$reply = socket_read($socket, 200); echo $reply;?>

于都县19719869087: 使用PHP脚本制作一个简单的留言板、跪求教程!! -
集婕消咳: 下载软件 XMPP === 用途:搭建php环境 系统 貌似现在的电脑基本上都能实现,除非你的电脑很老很老 安装万软件后浏览器输入localhost/phpmyadmin1、建立留言数据表2、建立留言字段 ->留言内容 ->留言作者 ->留言时间3、写php代码和写HTML页面实现留言 扩展资料是PHP教程,不懂的可以去多看看,不是一言两语就能说清楚的

于都县19719869087: PHP如何是实现签收功能?有一个按钮,点击按钮前内容或链接对其隐藏,点击后才能看到内容或链接. -
集婕消咳: 你要的这个应该只是JS控制一段元素的显示或者隐藏的效果 跟PHP没什么关系.有三种方法 第一:js就是通过控制那块元素的css属性,display:none display:block; 第二:createElement去创建一个元素显示.第三:这个就高级点了,跟php有一点点关系了,用ajax把值穿过去再传一个值回来 我不明白你的签收是什么意思.如果你是要类似于淘宝那种确认收货的话,那就是第三种用ajax了 思路大概就是用js创建一个按钮嘛,这个按钮调用ajax,ajax执行php文件里面的代码.这个代码就修改数据库,把交易状态改为确认收货.还有什么不明白的继续问.

于都县19719869087: php将包含汉字的URL转为字母或数字如何实现 -
集婕消咳: 用urlencode和urldecode相互转换.

于都县19719869087: 在PHP怎样进行动态数值命名 -
集婕消咳: $arr = array(); foreach(array('a','b','c') as $val ){ //在这里面怎么赋值 $arr[] =$val; } array_flip($arr);//数组内元素的键跟值互换 得到$arr['a']=0$arr['b']=1$arr['c']=2################################ 简单点的话用函数$arr=array();$st=array('a','...

于都县19719869087: PHP如何格式化数字?
集婕消咳: PHP格式化数字的函数是number_format 我建议你去下载一个PHP的使用手册,或者看网上的在线手册也行. http://www.itlearner.com/code/php/ 关于他的用法如下: 语法: string number_format(float number, int [decimals], string [dec_point], ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网