我是靠谱客的博主 含糊山水,最近开发中收集的这篇文章主要介绍Openssl Crypto 加/解密功能封装之一:进制转换1、环境2、源码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、环境

OpenSSL 版本:openssl-0.9.8d

请确保系统存在环境变量 SSL_ROOT, $SSL_ROOT/lib 存在 crypto 库文件,$SSL_ROOT/lib 已加入 LD_LIBRARY_PATH 中。

测试过的系统版本:RHEL 4.8 32 bit,AIX 5.3 64bit

 

2、源码

 

/*
 * NumSysConvert.h
 *
 *  基于 Openssl crypto 库的加密/解密功能封装
 *
 *  Created on: Mar 11, 2012
 *      Author: yeyuzhen<mail.yeyuzhen@gmail.com>
 */

#ifndef NUMSYSCONVERT_H_
#define NUMSYSCONVERT_H_

#include <iostream>
#include <string>

#include <openssl/x509v3.h>

/**
* @brief 二进制转十六进制
* @author 
*/
inline std::string Bin2Hex(std::string _in)
{
	std::string result;
	const char hexdig[] = "0123456789ABCDEF";

	if(_in.empty())
	{
		return result;
	}

	result.clear();
	for(std::string::iterator i = _in.begin(); i != _in.end(); i++)
	{
		result.append(1, hexdig[(*i >> 4) & 0xf]);  //留下高四位
		result.append(1, hexdig[(*i & 0xf)]);  //留下低四位

	}

	return result;
}


/**
* @brief 十六进制转二进制
* @author 
*/
inline std::string Hex2Bin(std::string _in)
{
	long int binSize = 0;
	unsigned char *t = NULL;
	std::string result;

	t = string_to_hex((char *)_in.c_str(), &binSize);  // 位于 x509v3.h

	result.clear();
	result.append((char *)t, binSize);

	return result;
}

#endif /* NUMSYSCONVERT_H_ */


 

/*
 * main.cpp
 *   
 *   进制转换测试
 *
 */

#include <iostream>
#include <string>

#include "NumSysConvert.h"

int main(int argc, char *argv[])
{
	char Bin[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
	std::string AllBin(Bin, 8);
	std::cout << "All Hex:" << Bin2Hex(AllBin) << std::endl;
	
	// 可查看内存值
	// gdb 单步执行到 line 19
	// (gdb) print AllBinResult
	// 记下 string 的底层字符串 _M_p 地址 0x??????
	// (gdb) x/8xb 0x??????
	std::string AllHex("0123456789ABCDEF");
	std::string AllBinResult = Hex2Bin(AllHex);
	std::cout << "All Bin" << AllBinResult << std::endl;
	
	// 非法十六进制转出的结果为空
	std::string InvalidHex("XYZ0123456789ABCDEF");
	std::cout << "Result Bin:" << Hex2Bin(InvalidHex) << std::endl;
	
	return 0;
}


Makefile:

NumSysConvert:NumSysConvert.h main.cpp
	g++ -g -o NumSysConvert -I$SSL_ROOT/include -L$SSL_ROOT/lib -lcrypto main.cpp


 

编辑记录:

V1.0 2012-4-24 12:52:04 初稿

最后

以上就是含糊山水为你收集整理的Openssl Crypto 加/解密功能封装之一:进制转换1、环境2、源码的全部内容,希望文章能够帮你解决Openssl Crypto 加/解密功能封装之一:进制转换1、环境2、源码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部