设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5423|回复: 3
打印 上一主题 下一主题

[加解密/安全] 如何获取字符的Unicode编码、Ascii码、及各种编码转换加密解密

[复制链接]
跳转到指定楼层
1#
发表于 2011-1-8 15:58:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现行大部分系统采用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等等,最后转成字符存储
就完成了加密,解密过程相反,这里不再赘述。
大家可以自己动手试试,有好的发现和方法可以和大家交流一下。

评分

参与人数 1经验 +8 收起 理由
t小宝 + 8 原创内容

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2011-1-8 17:24:23 | 只看该作者
很好,学习了
3#
发表于 2011-6-5 18:36:35 | 只看该作者
看看
4#
发表于 2011-6-5 18:37:31 | 只看该作者
看看,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 03:27 , Processed in 0.101451 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表