?? rfc3072.txt
字號:
SDX_EC_levelOvflw = 9
SDX_EC_paramMissing = 10
SDX_EC_magicError = 11
SDX_EC_not_consistent = 12
SDX_EC_wrongDataType = 13
SDX_EC_noMemory = 14
SDX_EC_error = 99 // rc is sufficiently
8.5 專用函數(shù)
除了上述基本定義外,還有一個(gè)全局函數(shù)(SDX_getOptions)可以返回指向全局性選項(xiàng)
表的指針。通過這些選項(xiàng)可以改變SDXF的行為方式,比方說可以定義自己的轉(zhuǎn)換表或者
從外部資源(比如磁盤)上讀取轉(zhuǎn)換表的函數(shù)。在這個(gè)選項(xiàng)表內(nèi)還包含用于加解密的函數(shù)指
針,因此通過設(shè)定該指針可以安裝自己的加密函數(shù)。選項(xiàng)表指針可以通過下述命令取得:
SDX_TOptions *opt = SDX_getOptions ();
結(jié)構(gòu)如下:
typedef struct
{
Byte *toHost; // Trans tab net -> host
Byte *toNet; // Trans tab host -> net
int maxlevel; // highest possible level
int translation; // translation net <-> host
// is in effect=1 or not=0
TEncryptProc *encryptProc; // alternate encryption routine
TGetTablesProc *getTablesProc; // alternate routine defining
// translation Tables
TcvtUTF8Proc *convertUTF8; // routine to convert to/from UTF-8
} SDX_TOptions;
typedef long TencryptProc (
int mode, // 1= to encrypt, 2= to decrypt, 3= encrypted length
Byte *buffer, // data to en/decrypt
long len, // len: length of buffer
char *passw); // Password
// returns length of en/de-crypted data
// (parameter buffer and passw are ignored for mode=3)
// returns blocksize for mode=3 and len=0.
// blocksize is zero for non-blocking algorithms
typedef int TGetTablesProc (Byte **toNet, Byte **toHost);
// toNet, toHost: pointer to output params. Both params
// points to translation tables of 256 Bytes.
// returns success: 1 = ok, 0 = error.
typedef int TcvtUTF8Proc
( int mode, // 1 = to UTF-8, 2 = from UTF-8
Byte *target, int *targetlength, // output
Byte *source, int sourcelength); // input
// targetlength contains maximal size as input param.
// returns success: 1 = ok, 0 = no conversion
9. 對UTF-8的支持
許多系統(tǒng)支持UTF-8作為交換數(shù)據(jù)的字符格式,這種格式的最大好處是不需要為特定
的程序指定固定的字符集,因?yàn)樗依怂械淖址褂秒p字節(jié)編碼按照“同一字符集”
UCS-2表示字符。SDXF本身并不處理UTF-8,對一個(gè)UTF-8序列可能有多種解釋,程序可
以:
? 重新構(gòu)成UCS-2序列;
? 僅僅接受純粹的ASCII字符而把非ASCII字符映射成非打印字符;
? 以ASCII為目標(biāo)字符集,非ASCII字符作適當(dāng)?shù)淖儞Q(比如把法語中帶有重音號
的元音去掉重音號);
? 以ASCII作為目標(biāo)字符集,非ASCII字符映射成其他的字符,但不一定是非打印
字符。
? 等等。
不過SDXF為函數(shù)“extract”和“create”提供了接口,為了實(shí)現(xiàn)這些處理可以在屬性
表內(nèi)指定相應(yīng)的函數(shù)指針。默認(rèn)情況下該指針為空,就是說SDXF不再作進(jìn)一步的轉(zhuǎn)換,
僅僅把數(shù)據(jù)作為“二進(jìn)制”位串簡單的復(fù)制一份。如果指定了函數(shù),則在“toUTF8”模式
調(diào)用create和在“fromUTF8”模式調(diào)用extract時(shí)就要執(zhí)行該函數(shù),由SDXF負(fù)責(zé)激活,對
用戶是透明的。如果函數(shù)返回0,則SDXF沒有作任何轉(zhuǎn)換而僅僅復(fù)制數(shù)據(jù)。
10. 安全問題
只要數(shù)據(jù)塊頭部中的任何數(shù)據(jù)錯(cuò)誤,則整個(gè)數(shù)據(jù)塊無效。經(jīng)過加密或壓縮的SDXF結(jié)
構(gòu)任何數(shù)據(jù)錯(cuò)誤都會(huì)導(dǎo)致該數(shù)據(jù)塊無法使用,在解密或解壓縮后應(yīng)該由“enter”函數(shù)進(jìn)行完
整性檢查。如果使用TCP/IP(更精確地講是IP)作為傳輸媒介,可以信賴該協(xié)議在傳輸層
上的CRC校驗(yàn)。
11. 幾點(diǎn)提示
1、 只要在“create”結(jié)構(gòu)塊時(shí)同時(shí)使用“l(fā)eave”,就可以保證SDXF結(jié)構(gòu)的一致性
構(gòu)造。在結(jié)構(gòu)塊創(chuàng)建時(shí),其數(shù)據(jù)類型被設(shè)為0,就是說這個(gè)塊還不完整,
SDX_leave把數(shù)據(jù)類型設(shè)為“structured”。
2、 在原子塊創(chuàng)建時(shí)要把依賴于平臺(tái)的格式轉(zhuǎn)換為平臺(tái)無關(guān)的格式,在構(gòu)造結(jié)束要
轉(zhuǎn)存緩沖區(qū)內(nèi)的數(shù)據(jù)時(shí)進(jìn)行,除此之外不作其它的處理。
3、 應(yīng)用程序不需要構(gòu)造特殊的SDXF結(jié)構(gòu),只要調(diào)用前面定義的函數(shù)就可以動(dòng)態(tài)
地創(chuàng)建數(shù)據(jù)。
4、 基于SDXF可以定義客戶端/服務(wù)器應(yīng)用的專門協(xié)議,只要根據(jù)以下兩條原則就
可以保證擴(kuò)展協(xié)議的向后兼容性:一是忽略無法識(shí)別的塊,二是不能依賴于塊
的順序。
12. 關(guān)于IANA
SDXF作為一種開放性的標(biāo)準(zhǔn),其壓縮和加密算法不是固定的,可以采用任何不同的算
法,因此必須對壓縮和加密算法的方法號進(jìn)行統(tǒng)一管理。(加密方法本身并非SDXF語義的
一部分,但可用于連接協(xié)議協(xié)商采用的加密方法。)以下兩項(xiàng)由IANA注冊。
12.1 壓縮方法
壓縮SDXF塊包含一個(gè)“壓縮頭”,其中用一個(gè)單字節(jié)無符號整數(shù)(1-255)表示采用的
壓縮方法,這個(gè)列表由IANA負(fù)責(zé)維護(hù):
壓縮方法
說明
備注
01
RUN-LENGTH算法
參見第5章
02
DEFLATE(zip)
參見[DEFLATE]
03-239
IANA分配
240-255
專用方法
12.2 加密方法
既可以采用固定的加密方法,也可以在握手協(xié)議中協(xié)商加密方法。對于后者必須為每種
可能用到的加密方法分配一個(gè)編號,該列表由IANA負(fù)責(zé)維護(hù):
加密方法
說明
01-239
IANA分配
240-255
專用方法
12.3 關(guān)于方法編號的分配
如果希望為SDXF注冊新的壓縮或加密方法,應(yīng)該與IANA聯(lián)系取得方法號。“編號分
配”文檔包含一系列的方法號與相應(yīng)的協(xié)議,參見[IANA]。新的方法必須作為RFC正式公
布,或者由標(biāo)準(zhǔn)化組織(如OSI)公布。
13. 討論
關(guān)于Internet數(shù)據(jù)交換已經(jīng)有許多標(biāo)準(zhǔn)可用,IETF推薦使用ASN.1和XML,因此需要
就建立新的數(shù)據(jù)格式的必要性進(jìn)行討論。
13.1 SDXF與ASN.1
制定ASN.1的目的是提供一種獨(dú)立于程序語言的定義數(shù)據(jù)結(jié)構(gòu)的方法,但是它并沒有
定義實(shí)際用于發(fā)送的數(shù)據(jù)格式,而一般采用BER或PER(以及某些派生類型如CER和DER),
參見[BER]和[PER]。隱藏在ASN.1背后的理念是:在任何平臺(tái)上開發(fā)指定的應(yīng)用程序都可
以用ASN.1的符號表示程序的數(shù)據(jù)結(jié)構(gòu)。除了這些之外,還可以通過ASN.1編譯器的幫助
生成實(shí)際的程序語言定義。這個(gè)編譯器同時(shí)還生成把數(shù)據(jù)結(jié)構(gòu)包裝成BER格式或者對BER
格式解包的轉(zhuǎn)換函數(shù)。
直接把ASN.1與SDXF相比可能不太合適,SDXF的數(shù)據(jù)格式更接近于BER(相對而
言),是用ASN.1定義數(shù)據(jù)結(jié)構(gòu)與SDXF并沒有矛盾。但是SDXF并不需要一個(gè)完整的數(shù)據(jù)
結(jié)構(gòu)構(gòu)造發(fā)送的信息,接收到的信息也不包含完整的數(shù)據(jù)結(jié)構(gòu)。其中的主要差別在于消息構(gòu)
造和解釋的概念,我把它稱為“動(dòng)態(tài)”和“靜態(tài)”:ASN.1采用靜態(tài)的方法,在消息創(chuàng)建之
前必須存在完整的數(shù)據(jù)結(jié)構(gòu);SDXF則采用動(dòng)態(tài)的方法,通過調(diào)用SDXF函數(shù)漸近地組裝和
分解消息。靜態(tài)結(jié)構(gòu)對某些應(yīng)用可能是適宜的,但是對于復(fù)雜的任務(wù)要完整地定義消息往往
是不可能的。ASN.1嘗試解決復(fù)雜結(jié)構(gòu)文本文檔的一個(gè)努力是XML,XML文檔包含一系列
章節(jié)、段落和文本元素,這些元素又可以遞歸地包含其它的章節(jié),個(gè)元素可以帶有特定的文
本屬性。
13.2 SDXF 與XML
另一方面,SDXF與XML非常類似,都可以處理遞歸定義的復(fù)雜的數(shù)據(jù)流,主要的差
別在于可以處理的數(shù)據(jù)類型。XML僅處理純文本數(shù)據(jù)(另外還要注意XML并沒有規(guī)定字
符數(shù)據(jù)的標(biāo)準(zhǔn)格式),XML文檔的所有標(biāo)簽都是可以閱讀的,不能直接包含圖像之類的二進(jìn)
制數(shù)據(jù),但是可以通過HTML之類的外部鏈接引用二進(jìn)制數(shù)據(jù)。在XML中,信息數(shù)據(jù)和
控制數(shù)據(jù)之間沒有明顯的區(qū)別,僅僅使用轉(zhuǎn)義字符(比如“<”和“&”)和<![CDATA[…]]>
結(jié)構(gòu)來區(qū)分。SDXF處理機(jī)器可讀的數(shù)據(jù),而不是用于人類閱讀,也不能用文本編輯器編輯
SDXF數(shù)據(jù)(使用壓縮和加密時(shí)尤其如此)。通過SDXF函數(shù)可以方便快捷的訪問所有的數(shù)
據(jù)元素,標(biāo)準(zhǔn)的SXDF數(shù)據(jù)結(jié)構(gòu)解析器只有一個(gè)簡單的框架,“while-switch-case ID –enter /
extract”,參見第3.4.2節(jié)。
由于XML和SDXF(以及ASN.1)背后完全不同的原理,直接對其進(jìn)行比較不是很明
智的,XML自有其存在的價(jià)值。SDXF同樣如此。但是不管怎樣,我們可以把XML數(shù)據(jù)流
轉(zhuǎn)化成SDXF結(jié)構(gòu)。首先把所有的XML標(biāo)簽都轉(zhuǎn)化成塊ID,元素序列<tag>純文本</tag>
可以轉(zhuǎn)換成類型為“字符”的原子(非結(jié)構(gòu))塊。帶有屬性的標(biāo)簽和嵌套標(biāo)簽轉(zhuǎn)換成結(jié)構(gòu)塊。
由于XML允許在文本流任何位置出現(xiàn)標(biāo)簽,必須引入一個(gè)人為的“簡單文本”標(biāo)簽。比如
用<t>表示文本元素標(biāo)簽,則序列:<t>this is a text <attr value='bold'>with</attr> attributes</t>
應(yīng)該想象成:
<t><et>this is a text </et><attr value='bold'><et>with</et></attr>
<et> attributes</et></t>
其中“et”表示“簡單文本”標(biāo)簽,,則轉(zhuǎn)換成如下的SDXF結(jié)構(gòu):
ID_t
|
+-- ID_et = " this is a text "
|
+-- ID_attr
| |
| +-- ID_value = "bold"
| |
| +-- ID_et = "with"
|
+-- ID_et = " attributes"
ID_t和ID_et可以用同一個(gè)ID表示,只能根據(jù)數(shù)據(jù)類型來區(qū)分(結(jié)構(gòu)塊用<t>,純字符
用<et>)。圖像之類的二進(jìn)制數(shù)據(jù)可以直接嵌入SDXF結(jié)構(gòu)而無需使用HTML或其他的外部
鏈接。
14. 作者地址
Max Wildgrube
Schlossstrasse 120
60486 Frankfurt
Germany
EMail: max@wildgrube.com
15. 鳴謝
感謝Michael J. Slifcak (mslifcak@iss.net)的積極探討。
16. 參考
[ASN.1] Information processing systems - Open Systems
Interconnection, "Specification of Abstract Syntax Notation
One (ASN.1)", International Organization for
Standardization, International Standard 8824, December
1987.
[BER] Information Processing Systems - Open Systems
Interconnection - "Specification of Basic Encoding Rules
for Abstract Notation One (ASN.1)", International
Organization for Standardization, International Standard
8825-1, December 1987.
[DEFLATE] Deutsch, P., "DEFLATE Compressed Data Format Specification
version 1.3", RFC 1951, May 1996.
[IANA] Internet Assigned Numbers Authority,
http://www.iana.org/numbers.htm
[PER] Information Processing Systems - Open Systems
Interconnection -"Specification of Packed Encoding Rules
for Abstract Syntax Notation One (ASN.1)", International
Organization for Standardization, International Standard
8825-2.
[UCS] ISO/IEC 10646-1:1993. International Standard -- Information
technology -- Universal Multiple-Octet Coded Character Set
(UCS)
[UTF8] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
RFC 2279, January 1998.
17. 版權(quán)聲明
Copyright (C) The Internet Society (2001). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
致謝
Funding for the RFC Editor function is currently provided by the
Internet Society.
RFC3072——Structured Data Exchange Format (SDXF) 結(jié)構(gòu)化數(shù)據(jù)交換格式
3
RFC文檔中文翻譯計(jì)劃
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -