php中rsa加密及解密和签名及验签
加密的内容长度限制为密钥长度少11位,如128位的密钥最多加密的内容为117个长度。
公钥加密
$public_content=file_get_contents(公钥路径);
$public_key=openssl_get_publickey($public_content);
$original_str='待加密的内容';
$original_arr=str_split($original_str,117); //折分
foreach($original_arr as $o)
{
$sub_enc=null;
openssl_public_encrypt($o,$sub_enc,$public_key);
$original_enc_arr[]=$sub_enc;
}
openssl_free_key($public_key);
$original_enc_str=base64_encode(implode('',$original_enc_arr));//最终网络传的密文
私钥解密
$private_content=file_get_contents(私钥路径);
$private_key=openssl_get_privatekey($private_content);
$original_enc_str=base64_decode(密文);
$orig_dec_str='';
for($i=0;$i<strlen($original_enc_str)/128;$i++)
{
$data=substr($original_enc_str,$i*128,128);
openssl_private_decrypt($data,$decrypt,$private_key);
$orig_dec_str.=$decrypt;
}
$orig_dec_str为最后解密出来的。
注:私钥加密及公钥解密同理。
-----------------------------------------------------------------------------------------------------------------------
私钥签名
$private_content=file_get_contents(私钥路径);
$private_key=openssl_get_privatekey($private_content);
$original_str='';//原数据
openssl_sign($original_str,$sign,$private_key);
openssl_free_key($private_key);
$sign=base64_encode($sign);//最终的签名
公钥验签
$public_content=file_get_contents(公钥路径);
$public_key=openssl_get_publickey($public_content);
$sign=base64_decode($sign)'';//得到的签名
$original_str='';得到的数据
$result=(bool)openssl_verify($original_str,$sign,$public_key);
openssl_free_key($public_key);
$result为真时签验通过,假时未通过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构