加密解密安全
获取字符的Unicode编码、Ascii码、及各种编码转换加密解密
2017-08-14 17:24:59

现行大部分系统采用Unicode编码Unicode编码是ASCII码的扩展Ascii码使用一个字节存储字符最多能编码256个字符,而Unicode编码采用两个字节存储字符,最多能编码65536个字符,每个字符都有自己独立的编码。VB和java内部都是是哟个Unicode编码的。由于数字和英文大小写字符都是Ascii字符集,用两个字节存储一个字节的字符有些浪费,于是为了网络传输方便,就出现了utf-8编码、utf-16编码。utf-8编码使用动态长度编码字符,对于ascii码内字段小于128的用一个字段编码,其编码方式如下所示:下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号. U-00000000 - U-0000007F: 0xxxxxxx  U-00000080 - U-000007FF: 110xxxxx 10xxxxxx  U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx  U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目. 例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为: 11000010 10101001 = 0xC2 0xA9 而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为: 11100010 10001001 10100000 = 0xE2 0x89 0xA0 这样就大大的提高到磁盘利用率,提高网络传输效率。那么如何获取字符的Ascii码呢?vba用asc("字符")函数获取字符的ascii码,注意:非ascii码表的字符会出现负值情况,建议使用其扩展码表函数:ascw("字符")对于大于ascii扩展码表的字符这样依然会出现负值情况,这时我们用以下函数直接获取Unicode码:CLng("&h"+Hex$(AscW((Mid([Str],1,1)))))这样就取得了字符的Unicode码,然后你就可以将其转成utf-8格式,再转成二进制字节流使用md5或者自定义函数进行加密解密了。自定义函数如:字符二进制字节为:01010001    01010011你可以进行反转   :11001010    10001010替换                 :00110101    01110101穿插                 :01001101    11010101还可以有更多加密操作,比如<<>> mod等等,最后转成字符存储就完成了加密,解密过程相反,这里不再赘述。