Chinaunix首页 | 论坛 | 博客
  • 博客访问: 691014
  • 博文数量: 165
  • 博客积分: 8218
  • 博客等级: 中将
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 19:48
文章分类

全部博文(165)

文章存档

2014年(4)

2011年(3)

2010年(6)

2009年(43)

2008年(109)

分类: LINUX

2010-09-18 14:51:34

这几天搞个aes加密,当然aes是用的openssl的库,哥只是做上层的。这里涉及到加密后的密文在网络上的传输,规格要用json传输,而json是不能传binary数据的,一般是转换成16进制字符串或用base64处理。我这里为了方便采用16进制处理。 binary转16进制字符串:比如:1111 0000转成:“F0” int len = 16; char *bin; //binary数据buffer,len size char hex_str[36]; /* 转换后长度加倍,还要加上'\0'的空间 */ int i; char hex[4]; for(i = 0; i < len; i++) { memset(hex, 0, sizeof(hex)); /* 这里必须要是 %02X,如果用%X则会将前导0丢失 */ sprintf(hex, "%02X", (*(bin+i))&0xff); strcat(hex_str, hex); } binary数据转换成十六进制字符串比较简单。 16进制字符串转binary数据:这个稍微复杂一点儿,比如:“E3”转成:1110 0011 8位一转: int hex2ascii(char c) { char ret; if(c >= '0' && c <= '9') /* c为0-9的数字 */ ret = c - '0'; else if(c >= 'a' && c <= 'f') ret = c - 'a'; else if(c >= 'A' && c <= 'F') ret = c - 'A'; else //error return ret; } char hex_str[36]; /* hex_str 实际数据长度为32 */ char *bin[16] int i, j =0; for(i = 0 ; i < 32; i+=2) { char c1, c2; c1 = hex2ascii(hex_str[i]); c2 = hex2ascii(hex_str[i+1]; *(bin+j) = c1 * 16 + c2; j++ }
 
阅读(4896) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~