verify signature pdf php(php如何做数字签名)

本文目录
- php如何做数字签名
- php的openssl_sign($data,$sign,$private_key)这个函数的源码是什么
- fail to verify whole-file signature 怎么解决
php如何做数字签名
概括就是:“学会用PHP的openssl扩展!!”
1、先用openssl_pkey_new()函数产生一个私钥pri_key,
2、用openssl_csr_new()函数以私钥pri_key 产生一个信用证csr
3、用openssl_sign()函数以私钥pri_key对一段数据data产生一个数字签名signature。
4、用openssl_pkey_get_public()函数从信用证csr中获得公钥pub_key
5、把公钥pub_key、数字签名signature、数据data发给对方。
6、对方收到3项后,用openssl_verify()函数或其他验证工具,验证签名。
7、对方验证有效,开始使用你的信息data。验证无效,再找你扯皮。
整个过程的双方可以互换,即可让对方出具三项,你来验证。
php的openssl_sign($data,$sign,$private_key)这个函数的源码是什么
PHP_FUNCTION(openssl_sign)
{
zval **key, *signature;
EVP_PKEY *pkey;
int siglen;
unsigned char *sigbuf;
long keyresource = -1;
char * data;
int data_len;
EVP_MD_CTX md_ctx;
zval *method = NULL;
long signature_algo = OPENSSL_ALGO_SHA1;
const EVP_MD *mdtype;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szZ|z", &data, &data_len, &signature, &key, &method) == FAILURE) {
return;
}
pkey = php_openssl_evp_from_zval(key, 0, "", 0, &keyresource TSRMLS_CC);
if (pkey == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param cannot be coerced into a private key");
RETURN_FALSE;
}
if (method == NULL || Z_TYPE_P(method) == IS_LONG) {
if (method != NULL) {
signature_algo = Z_LVAL_P(method);
}
mdtype = php_openssl_get_evp_md_from_algo(signature_algo);
} else if (Z_TYPE_P(method) == IS_STRING) {
mdtype = EVP_get_digestbyname(Z_STRVAL_P(method));
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
if (!mdtype) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
siglen = EVP_PKEY_size(pkey);
sigbuf = emalloc(siglen + 1);
EVP_SignInit(&md_ctx, mdtype);
EVP_SignUpdate(&md_ctx, data, data_len);
if (EVP_SignFinal (&md_ctx, sigbuf,(unsigned int *)&siglen, pkey)) {
zval_dtor(signature);
sigbuf = ’\0’;
ZVAL_STRINGL(signature, (char *)sigbuf, siglen, 0);
RETVAL_TRUE;
} else {
efree(sigbuf);
RETVAL_FALSE;
}
EVP_MD_CTX_cleanup(&md_ctx);
if (keyresource == -1) {
EVP_PKEY_free(pkey);
}
}
这个是函数的源码,C写的。源码可以在php官网下载一个php版本,解压打开里面的ext/openssl.c搜上面代码即可。
fail to verify whole-file signature 怎么解决
签名验证失败,这是刷机失败的提示吧。
一般这种情况,只能去官网下载完整升级包,重新刷机了,重新刷机可以拨打客服电话,会指导你操作(注意,原有手机中的内容会丢失!)

本文相关文章:
redis怎么存一个php(php如何把key存储在不同的redis分片上)
2026年7月18日 11:00
php读取大文件(php如何读取CSV大文件并且将其导入数据库示例)
2025年12月23日 10:30
更多文章:
code是什么意思c语言(C语言中,code uint8 a[] 里面的“code“是什么意思)
2026年2月6日 01:45
中信银行app上开通的会员在哪里找?qq红色会员装扮专区怎么进
2026年5月25日 19:30
mybatis plus批量删除(如何实现springmvc+mybatis用多选框批量删除的功能Java代码)
2025年10月26日 18:30
腾讯视频url地址怎么获取(怎么读取到腾讯视频的真实可引用地址)
2026年5月20日 18:15
oracle vm virtualbox怎么复制粘贴(如何向virtualbox虚拟机拷贝文件)
2026年2月15日 18:15
java地下城与勇士(地下城与勇士韩服手游检查非法程序oppo手机怎么设置)
2026年3月4日 11:15
中高端女包品牌有哪些牌子?十大全球品牌女包排行榜(包包牌子有哪些)
2025年9月11日 17:15
html默认占据整行(HTML 中怎样使input占据表格的整个td)
2026年7月15日 00:00















