Openssl Crypto 加/解密功能封装之一:进制转换

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 初稿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值