Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 5901|回復(fù): 3
打印 上一主題 下一主題

[加解密/安全] 如何獲取字符的Unicode編碼、Ascii碼、及各種編碼轉(zhuǎn)換加密解密

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2011-1-8 15:58:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
現(xiàn)行大部分系統(tǒng)采用Unicode編碼Unicode編碼是ASCII碼的擴(kuò)展
Ascii碼使用一個(gè)字節(jié)存儲(chǔ)字符最多能編碼256個(gè)字符,而Unicode編碼采用兩個(gè)字節(jié)存儲(chǔ)字符,最多能編碼65536個(gè)字符,每個(gè)字符都有自己獨(dú)立的編碼。
VB和java內(nèi)部都是是喲個(gè)Unicode編碼的。由于數(shù)字和英文大小寫(xiě)字符都是Ascii字符集,用兩個(gè)字節(jié)存儲(chǔ)一個(gè)字節(jié)的字符有些浪費(fèi),于是為了網(wǎng)絡(luò)傳輸方便,就出現(xiàn)了utf-8編碼、utf-16編碼。
utf-8編碼使用動(dòng)態(tài)長(zhǎng)度編碼字符,對(duì)于ascii碼內(nèi)字段小于128的用一個(gè)字段編碼,其編碼方式如下所示:
下列字節(jié)串用來(lái)表示一個(gè)字符. 用到哪個(gè)串取決于該字符在 Unicode 中的序號(hào).

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 的位置由字符編碼數(shù)的二進(jìn)制表示的位填入. 越靠右的 x 具有越少的特殊意義. 只用最短的那個(gè)足夠表達(dá)一個(gè)字符編碼數(shù)的多字節(jié)串. 注意在多字節(jié)串中, 第一個(gè)字節(jié)的開(kāi)頭"1"的數(shù)目就是整個(gè)串中字節(jié)的數(shù)目.

例如: Unicode 字符 U+00A9 = 1010 1001 (版權(quán)符號(hào)) 在 UTF-8 里的編碼為:

11000010 10101001 = 0xC2 0xA9

而字符 U+2260 = 0010 0010 0110 0000 (不等于) 編碼為:

11100010 10001001 10100000 = 0xE2 0x89 0xA0

這樣就大大的提高到磁盤(pán)利用率,提高網(wǎng)絡(luò)傳輸效率。


那么如何獲取字符的Ascii碼呢?
vba用asc("字符")函數(shù)獲取字符的ascii碼,注意:非ascii碼表的字符會(huì)出現(xiàn)負(fù)值情況,建議使用其擴(kuò)展碼表函數(shù):ascw("字符")
對(duì)于大于ascii擴(kuò)展碼表的字符這樣依然會(huì)出現(xiàn)負(fù)值情況,這時(shí)我們用以下函數(shù)直接獲取Unicode碼:CLng("&h"+Hex$(AscW((Mid([Str],1,1)))))
這樣就取得了字符的Unicode碼,然后你就可以將其轉(zhuǎn)成utf-8格式,再轉(zhuǎn)成二進(jìn)制字節(jié)流使用md5或者自定義函數(shù)進(jìn)行加密解密了。
自定義函數(shù)如:
字符二進(jìn)制字節(jié)為:01010001    01010011
你可以進(jìn)行反轉(zhuǎn)   :11001010    10001010
替換                 :00110101    01110101
穿插                 :01001101    11010101
還可以有更多加密操作,比如<<>> mod等等,最后轉(zhuǎn)成字符存儲(chǔ)
就完成了加密,解密過(guò)程相反,這里不再贅述。
大家可以自己動(dòng)手試試,有好的發(fā)現(xiàn)和方法可以和大家交流一下。

評(píng)分

參與人數(shù) 1經(jīng)驗(yàn) +8 收起 理由
t小寶 + 8 原創(chuàng)內(nèi)容

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2011-1-8 17:24:23 | 只看該作者
很好,學(xué)習(xí)了
3#
發(fā)表于 2011-6-5 18:36:35 | 只看該作者
看看
4#
發(fā)表于 2011-6-5 18:37:31 | 只看該作者
看看,學(xué)習(xí)一下
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:28 , Processed in 0.089430 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表