这几天搞个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++ }
阅读(4985) | 评论(0) | 转发(0) |