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编码

使用OpenSSL进行Base64编码和解码

OpenSSL 使用 base64 编码/解码(liang19890820)

OpenSSL 一行 base64 输入。读取输入文件时出错

OpenSSL一行base64输入。读取输入文件时出错

php openssl base64解密