OpenSSL测试-Base64
Posted 20201208史逸霏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenSSL测试-Base64相关的知识,希望对你有一定的参考价值。
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 1. 使用工具(如bc,计算机器等)把自己学号转化为16进制,提交转化过程和结果截图(2‘) 2. 使用工具(如echo -e, ultraedit等)把上面转化的结果写入二进制文件“你的学号.dat”中,并用工具`od -tx1 你的学号.dat`,提交命令运行(3’) 3. 使用OpenSSL的base64命令对"你的学号.dat"进行编码解码,提交过程截图(5\') 4. 使用OpenSSL编程对"你的学号.dat"进行编码解码,提交代码和运行结果截图。(10’)
https://www.cnblogs.com/20201212ycy/p/17308523.html
使用工具(如bc,计算机器等)把自己学号转化为16进制,提交转化过程和结果截图
使用工具(如echo -e, ultraedit等)把上面转化的结果写入二进制文件“你的学号.dat"
3、使用OpenSSL的base64命令对"你的学号.dat"进行编码解码,提交过程截图
4、使用OpenSSL编程对"你的学号.dat"进行编码解码,提交代码和运行结果截图。
#include <stdio.h> #include <string.h> #include <openssl/evp.h> #include <openssl/x509.h> //Base64编码 void tEVP_Encode() EVP_ENCODE_CTX *ctx; ctx = EVP_ENCODE_CTX_new(); //EVP编码结构体 unsigned char in[1024]; //输入数据缓冲区 int inl; //输入数据长度 char out[2048]=0; //输出数据缓冲区 int outl; //输出数据长度 FILE *infp; //输入文件句柄 FILE *outfp; //输出文件句柄 infp = fopen("20201208.dat","rb");//打开待编码的文件 if(infp == NULL) printf("Open File \\"20201208.dat\\" for Read Err.\\n"); return; outfp = fopen("20201208.txt","w");//打开编码后保存的文件 if(outfp == NULL) printf("Open File \\"20201208.txt\\" For Write Err.\\n"); return; EVP_EncodeInit(ctx);//Base64编码初始化 printf("文件\\"20201208.dat\\" Base64编码后为:\\n"); //循环读取原文,并调用EVP_EncodeUpdate计算Base64编码 while(1) inl = fread(in,1,1024,infp); if(inl <= 0) break; EVP_EncodeUpdate(ctx,out,&outl,in,inl);//编码 fwrite(out,1,outl,outfp);//输出编码结果到文件 printf("%s",out); EVP_EncodeFinal(ctx,out,&outl);//完成编码,输出最后的数据。 fwrite(out,1,outl,outfp); printf("%s",out); fclose(infp); fclose(outfp); printf("对文件\\"20201208.dat\\" Base64编码完成,保存到\\"20201208.txt\\"文件.\\n\\n\\n"); //Base64解码 void tEVP_Decode() EVP_ENCODE_CTX *ctx; ctx = EVP_ENCODE_CTX_new(); //EVP编码结构体 char in[1024]; //输入数据缓冲区 int inl; //输入数据长度 unsigned char out[1024]; //输出数据缓冲区 int outl; //输出数据长度 FILE *infp; //输入文件句柄 FILE *outfp; //输出文件句柄 infp = fopen("20201208.txt","r");//打开待解码的文件 if(infp == NULL) printf("Open File \\"20201208.txt\\" for Read Err.\\n"); return; outfp = fopen("20201208.dat","wb");//打开解码后保存的文件 if(outfp == NULL) printf("Open File \\"20201208.txt\\" For Write Err.\\n"); return; EVP_DecodeInit(ctx);//Base64解码初始化 printf("开始对文件\\"20201208.txt\\" Base64解码...\\n\\n"); //循环读取原文,并调用EVP_DecodeUpdate进行Base64解码 while(1) inl = fread(in,1,1024,infp); if(inl <= 0) break; EVP_DecodeUpdate(ctx,out,&outl,in,inl);//Base64解码 fwrite(out,1,outl,outfp);//输出到文件 EVP_DecodeFinal(ctx,out,&outl);//完成解码,输出最后的数据。 fwrite(out,1,outl,outfp); fclose(infp); fclose(outfp); printf("对文件\\"20201208.txt\\" Base64解码完成,保存为\\"20201208-1.dat\\"\\n\\n\\n"); int main() tEVP_Encode(); tEVP_Decode(); return 0;
php openssl base64解密
一、最近有项目接入了第四方支付,第四方支付提供的文档需要两边进行openssl配合私钥、公钥进行RSA加密来双方通信
二、环境说明
1、LAMP、LNMP都可以,我的环境暂时是LAMP
2、php先安装openssl扩展,否则使用函数会报错,具体openssl扩展可以去百度或者参考博客文档
三、代码实现
1、发送加密数据
<?php
//加密
//组成加密数据
$arr = array(
‘name‘ => ‘test‘, //第三方平台的会员账号
‘password‘ => ‘test‘, //第三方平台的会员密码
‘amount‘ => ‘100‘, //转账金额,最低100,为100的整数倍
‘order_sn‘ => ‘123456789abc‘, //数商交易所生成的订单号(第三方平台在处理完毕后需要回传)
‘sign‘ => ‘86e06157205d5155f5fdddcf077604fd‘, //数商交易所生成的sign(第三方平台在处理完毕后需要回传)
);
//先转成json格式的数据
$arr = json_encode($arr);
//根据私钥获取加密字符串
$key = "私钥内容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($key, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
openssl_private_encrypt($arr, $data, $res);
//base64编码
$data = base64_encode($data);
//发送POST请求
$to_arr = array(
‘data‘ => $data
);
//POST请求忽略
2、获取加密串解密
<?php
//解密
$data = "第四方返回的data加密串";
$key= "第四方提供的公钥内容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($pubKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
//解密字符串
$crypto = ‘‘;
foreach (str_split(base64_decode($data), 128) as $chunk) {
openssl_public_decrypt($chunk, $decryptData, $res);//$decryptData为解密后的数据
$crypto .= $decryptData;
}
//解析json数据得到数组
$arr = json_decode($crypto);
//打印结果
var_dump($arr);
本文出自 “12633313” 博客,请务必保留此出处http://12643313.blog.51cto.com/12633313/1968174
以上是关于OpenSSL测试-Base64的主要内容,如果未能解决你的问题,请参考以下文章
OpenSSL 使用 base64 编码/解码(liang19890820)