PHP RSA 报错
openssl_sign(): supplied key param cannot be coerced into a private key
原因:
本地测试正常,服务器报错
使用测试数据和测试秘钥,本地和服务器都正常
这种情况说明与PHP和OPENSSL版本无关(已经重新编译过PHP和OPENSSL,浪费好多时间)
解决方式:
http://www.itguai.com/php/a5246028.html
看了这篇文章,终于找到解决方式了,
RSA 的秘钥一般都有固定换行格式,是不是这种情况导致的呢
按照此格式试试,问题竟然顺利解决

私钥

$str='你的私钥(改成一行)';
$str        = chunk_split($str, 64, "\n");$key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";$signature = '';if (openssl_sign($data, $signature, $key, OPENSSL_ALGO_MD5)) {echo base64_encode($signature);}

公钥

$data='内容';
$str='你的公钥(改成一行)';
$str               = chunk_split($str, 64, "\n");$key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n";$signature = "";if (openssl_verify(base64_decode($data), $signature, $key, OPENSSL_ALGO_MD5) == 1) {echo $signature;}

案例:
http://php.net/manual/en/function.openssl-sign.php 官方案例 改造了一下
官方的公钥私钥格式太标准,所以要改造一下。
因为我们拿到的公钥私钥有可能就是一行的

$data = "Beeeeer is really good.. hic...";
$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z
RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9
sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R
6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ
h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n
Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra
I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6
zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ==
-----END PUBLIC KEY-----
EOD;

/
//上面是官方的  改造一下
///
//例如我们拿到的公钥私钥是一行的
//私钥
$str='MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJh1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2nY79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHraI2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI';
$str        = chunk_split($str, 64, "\n");
$private_key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";//公钥
$str='MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ==';
$str               = chunk_split($str, 64, "\n");$public_key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n";$binary_signature = "";openssl_sign($data, $binary_signature, $private_key, OPENSSL_ALGO_SHA1);// Check signature
$ok = openssl_verify($data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "check #1: ";
if ($ok == 1) {echo "signature ok (as it should be)\n";
} elseif ($ok == 0) {echo "bad (there's something wrong)\n";
} else {echo "ugly, error checking signature\n";
}$ok = openssl_verify('tampered'.$data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "check #2: ";
if ($ok == 1) {echo "ERROR: Data has been tampered, but signature is still valid! Argh!\n";
} elseif ($ok == 0) {echo "bad signature (as it should be, since data has beent tampered)\n";
} else {echo "ugly, error checking signature\n";
}

openssl_sign(): supplied key param cannot be coerced into a private key相关推荐

  1. php openssl_sign报错,openssl_sign(): supplied key param cannot be coerced into a private key

    $data = "Beeeeer is really good.. hic..."; $private_key = << $public_key = << ...

  2. Generate public key from private key in keychain

    ref link: http://stackoverflow.com/questions/16847081/i-lost-my-public-key-can-i-recover-it-from-a-p ...

  3. Unable to use key file xxx (OpenSSH SSH-2 private key)

    Unable to use key file "xxx" (OpenSSH SSH-2 private key) When you try to use a private key ...

  4. redis 能不能监听特定的key失效_Spring boot实现监听Redis key失效事件实现和其它方式...

    1.pom 中添加依赖 org.springframework.boot spring-boot-starter-data-redis 2.定义配置RedisListenerConfig /** * ...

  5. vue 用key拿对象value_vue对象添加属性(key:value)、显示和删除属性

    效果图 新增 key值 value值 操作 {{key}} {{keyValues[key]}} 删除 添加属性 addKey(){ if(this.keyValue.key==''){ this.$ ...

  6. python脚本 通过rsa private key 生成 publickey

    说明:蓝色=命令名称 浅绿=命令参数 浅蓝=选项 紫色=目录 系统环境:CentOS  5.5 x86_64 python版本:Python 2.7.3 参考paramiko和pycrypto官方文档 ...

  7. Git 多台电脑共用SSH Public/Private Key

    2019独角兽企业重金招聘Python工程师标准>>> 好了,下面一步一步来实现SSH Public/Private Key的在多台电脑中的共用: 0. 首先我们给旧的MBP起名叫O ...

  8. fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?

    来源:http://i7q.cn/4NHBun 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 1. DEL/SET/GE ...

  9. key设计 短信验证存redis_Redis存储Key的一种设计实现方式:模式匹配

    一.前言 Redis是Key-Value数据库,存储的时候需要一个唯一的Key值,查询的时候根据根据key值进行查询,但是Redis毕竟只是key-value存储,所以有很多局限性.例如: (1)无法 ...

  10. 生成pfx文件需要在服务器上执行,PEM文件和private.key文件生成IIS服务器所需的pfx文件(配置SSL用)...

    第一步:输入域名,点击"创建免费的SSL证书"按钮,如图 第二步:输入邮箱,点击创建,如图 创建成功后,需要进行dns验证,结果图如下: 第三步:在域名所在的云服务器上,添加域名解 ...

最新文章

  1. java json发送文件_关于java:REST API设计在同一请求中将JSON数据和文件发送到api...
  2. 如何让java代码保存一天内的记录_Java的JVM解读
  3. symfony的安装方法
  4. 什么是最左匹配原则?
  5. ygbook和ptcms哪个好_YGBOOK小说系统安装使用教程
  6. linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
  7. linux下文件管理方式iscsi-ipsan
  8. 验证集精度高于训练集精度的原因分析
  9. data fastboot 擦除_安卓刷机 - Fastboot命令
  10. 基于JAVA教师教学质量评估系统计算机毕业设计源码+数据库+lw文档+系统+部署
  11. BLE(15)—— Privacy
  12. 基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程
  13. SRC漏洞挖掘--CNVD国家信息安全漏洞共享平台
  14. “Sensor”的名词解释与概述
  15. 二、VB.NET实现给图片添加文字水印
  16. 【17】 强化学习 17章 前沿技术
  17. python小游戏毕设 坦克大战小游戏设计与实现 (源码)
  18. java quartz下载_下载、设置和运行Quartz(GUI)图形界面程序----Quartz Web
  19. 老字号品牌玩跨界,是路子野还是博眼球?
  20. 中职计算机基础应用知识,总发中职《计算机应用基础:基础模块》第一单元 计算机基础知识.pptx...

热门文章

  1. js常用正则 验证数字正则
  2. NLP-信息抽取-NER-2019:LGN【A Lexicon-Based Graph Neural Network for Chinese NER】
  3. 音乐心理学 | 书籍推荐
  4. 访问共享文件夹总是提示“指定的网络名不再可用”,重启就好了
  5. 云痕大数据 家长登录_云痕大数据查成绩app
  6. 何谓计算机思维(转载)
  7. 英语好文22.6.23
  8. 方法重载和方法重写的区别
  9. Google浏览器清理缓存快捷键是什么
  10. 电脑桌面云便签怎么新建分类文件夹标签?