Apple 的个人资料给未来的自己照片日志列表更多 ![]() | 帮助 |
|
|
10月10日 MD5简介 md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但md2的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5却是面向32位的电脑。这三个算法的描述和c语言源代码在internet rfcs 1321中有详细的描述(http://www.ietf.org/rfc/rfc1321.txt),这是一份最权威的文档,由ronald l. rivest在1992年8月向ieft提交。
rivest在1989年开发出md2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,rogier和chauvaud发现如果忽略了检验和将产生md2冲突。md2算法的加密后结果是唯一的--既没有重复。 为了加强算法的安全性,rivest在1990年又开发出md4算法。md4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512 = 448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。den boer和bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,md4就此被淘汰掉了。 尽管md4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了md5以外,其中比较有名的还有sha-1、ripe-md以及haval等。 一年以后,即1991年,rivest开发出技术上更为趋近成熟的md5算法。它在md4的基础上增加了"安全-带子"(safety-belts)的概念。虽然md5比md4稍微慢一些,但却更为安全。这个算法很明显的由四个和md4设计有少许不同的步骤组成。在md5算法中,信息-摘要的大小和填充的必要条件与md4完全相同。den boer和bosselaers曾发现md5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。 van oorschot和wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索md5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代md5算法的md6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响md5的安全性。上面所有这些都不足以成为md5的在实际应用中的问题。并且,由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,md5也不失为一种非常优秀的中间技术),md5怎么都应该算得上是非常安全的了。 2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。 MD5破解工程权威网站http://www.md5crk.com/ 是为了公开征集专门针对MD5的攻击而设立的,网站于2004年8月17日宣布:“中国研究人员发现了完整MD5算法的碰撞;Wang, Feng, Lai与Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128几个 Hash函数的碰撞。这是近年来密码学领域最具实质性的研究进展。使用他们的技术,在数个小时内就可以找到MD5碰撞。……由于这个里程碑式的发现,MD5CRK项目将在随后48小时内结束”。 MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA. MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程: 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。 我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。 MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码覆盖原来的就行了。 MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。 正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。 对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。 MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。 以一下是每次操作中用到的四个非线性函数(每轮一个)。 F(X,Y,Z) =(X&Y)|((~X)&Z) G(X,Y,Z) =(X&Z)|(Y&(~Z)) H(X,Y,Z) =X^Y^Z I(X,Y,Z)=Y^(X|(~Z)) (&是与,|是或,~是非,^是异或) 这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。 F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。 (感慨一下侯孟波的课果然都被我睡觉了。。) base64简介与代码实现base64简介
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 这样说会不会太抽象了?不怕,我们来看一个例子: 转换前 aaaaaabb ccccdddd eeffffff 转换后 00aaaaaa 00bbcccc 00ddddee 00ffffff 应该很清楚了吧?上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。 转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:(摘自RFC2045) Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y 让我们再来看一个实际的例子,加深印象! 转换前 10101101 10111010 01110110 转换后 00101011 00011011 00101001 00110110 十进制 43 27 41 54 对应码表中的值 r b p 2 所以上面的24位编码,编码后的Base64值为 rbp2 解码同理,把 rbq2 的二进制位连接上再重组得到三个8位值,得出原码。 (解码只是编码的逆过程,在此我就不多说了,另外有关MIME的RFC还是有很多的,如果需要详细情况请自行查找。) 用更接近于编程的思维来说,编码的过程是这样的: 第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。 然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。 再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。 最后取第三个字符的右6位即获得第四个目标字符。 在以上的每一个步骤之后,再把结果与 0x3F 进行 AND 位操作,就可以得到编码后的字符了。 可是等等……聪明的你可能会问到,原文的字节数量应该是3的倍数啊,如果这个条件不能满足的话,那该怎么办呢? 我们的解决办法是这样的:原文的字节不够的地方可以用全0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。因为: 余数 = 原文字节数 MOD 3 所以余数任何情况下都只可能是0,1,2这三个数中的一个。如果余数是0的话,就表示原文字节数正好是3的倍数(最理想的情况啦)。如果是1的话,为了让Base64编码是4的倍数,就要补2个等号;同理,如果是2的话,就要补1个等号。 在线转换:http://md5.mmkey.com/base64/ base64编码与解码工具有很多,这里推荐eCrypt软件,可以从http://sourceforge.net/project/showfiles.php?group_id=190563&package_id=223563&release_id=490837中下载软件和源代码。 Quoted-Printable也是MIME邮件中常用的编码方式之一。同Base64一样,它也将输入的字符串或数据编码成全是ASCII码的可打印字符串。 Quoted-Printable编码的基本方法是:输入数据在33-60、62-126范围内的,直接输出;其它的需编码为“=”加两个字节的HEX码(大写)。为保证输出行不超过规定长度,可在行尾加“=\r\n”序列作为软回车。 软件需求学习2举例: 买东西(非正式版本)
3、需求工程推荐方法
需求工程注重应用“最佳方法”。这些方法适用于一些项目,但是不适用于另一些项目,所以需要裁剪一些方法适用于所有项目。 软件需求学习需求层次:
需求开发过程 0、 开发过程 1、 需求收集: 定义项目的视图和范围。 学习与了解本行业的知识,这样与用户比较容易沟通。 访问有潜力的用户,对用户进行分类并找各自合适的代表,找出新软件产品的用户需求。注意与用户沟通技巧。 对目前市场上竞争产品进行研究,进行功能提取与解决方案分析,写成文档。 收集了用户在使用现有系统过程中所遇到问题的信息,还接受了用户关于系统改进的想法。 市场调查和用户问卷调查。 观察正在工作的用户,预见用户在使用当前系统时所遇到的问题,并能分析新的系统可有效支持工作流程与功能。 做用户的学徒,揭示有意识和无意识的需求,如果用户因为“太忙”而无法交谈,这种方法很有用。 业务事件研讨会,产生业务规则与目标。 头脑风暴,召集一组聪明的、有意愿的、不同学科背景、不同经验的人,让他们对新产品产生尽可能多的想法。 用录像记录用户和需求分析师参加的研讨会和头脑风暴的过程,录像的作用有:记录、确认、备忘。 2、 需求分析: 绘制关联图 创建开发原型 确定需求优先级 为需求建立模型,需求原型是对需求模拟的模型,设计目的是帮助了解更多用户需求。需求原型有三种: 1)低保真原型是一种快速模拟产品的方式,使用熟悉的技术,诸如笔、纸、白板等。低保真原型有助于将注意力集中在产品做什么上,而不是产品看起来如何,他们有助于发现遗漏的功能和测试产品的范围。 2)高保真原型使用做原型的工具来给出非常真实的外观,他们对于发现易用性需求是特别有效的。 3)场景模型是一项是抽象主题变得生动的技巧,它通过对一个特定实例讲故事的方式来做到这一点。这些模型能有效地帮助人们将注意力集中在细节上,并发现其他情况可能会遗漏的异常。 编写数据字典 通过用例提取与分析需求,如果用例编写恰当,可以准确地对系统必须做什么进行详细的描述。用例不是所有的需求。用例不详细地描述外部接口、数据格式、业务规则和复杂公式。用例只是收集了所有需求中的一部分。 3、 编写规格说明书 采用软件需求规格说明模版,可以采用CMMI中的需求规格说明模版。 正确的、完整的表达所描述的需求。
4、 需求验证 对需求进行审查 用测试用例来验证需求 验收判断标准表
需求管理方法以及常用需求管理工具管理需求: 需求管理的策略:包括变更控制,需求跟踪(跟踪矩阵、需求状态跟踪如已建议,已批准,已实现,已验证,已删除)和变更的影响分析。 需求管理的主要活动:
需求管理工具 RequisitePro CaliberRM DOORS
附录: 1、 在工作中找些项目或者找些开源项目来分析与开发系统需求,积累经验,从成功中获益并避免导致失败的失误。 2、如何编写一个好的用例 想学会如何阅读用例是很容易的,但是学会编写一个好的用例却不容易。编写者必须掌握三个概念: 范围:真正被谈论的系统是什么? 主执行者:谁有要实现的目标? 层次:目标的层次是高还是低? 用例格式有很多中,比如完整正式的用例格式、非正式的用例格式、单列表格格式、RUP格式等。 完整正式的用例格式:
RUP格式:
8月27日 to_dateTO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小时格式下时间范围为: 0:00:00 - 23:59:59.... 12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 1. 日期和字符转换函数用法(to_date,to_char) 2. select to_char( to_date(222,'J'),'Jsp') from dual 显示Two Hundred Twenty-Two 3. 求某天是星期几 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; monday 设置日期语言 ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American') 4. 两个日期间的天数 select floor(sysdate - to_date('20020405','yyyymmdd')) from dual; 5. 时间为null的用法 select id, active_date from table1 UNION select 1, TO_DATE(null) from dual; 注意要用TO_DATE(null) 6. a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') 那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。 所以,当时间需要精确的时候,觉得to_char还是必要的 7. 日期格式冲突问题 输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01' alter system set NLS_DATE_LANGUAGE = American alter session set NLS_DATE_LANGUAGE = American 或者在to_date中写 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, 可查看 select * from nls_session_parameters select * from V$NLS_PARAMETERS 8. select count(*) from ( select rownum-1 rnum from all_objects where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002- 02-01','yyyy-mm-dd')+1 ) where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' ) not in ( '1', '7' ) 查找2002-02-28至2002-02-01间除星期一和七的天数 在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒). 9. select months_between(to_date('01-31-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 1 select months_between(to_date('02-01-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 1.03225806451613 10. Next_day的用法 Next_day(date, day) Monday-Sunday, for format code DAY Mon-Sun, for format code DY 1-7, for format code D 11 select to_char(sysdate,'hh:mi:ss') TIME from all_objects 注意:第一条记录的TIME 与最后一行是一样的 可以建立一个函数来处理这个问题 create or replace function sys_date return date is begin return sysdate; end; select to_char(sys_date,'hh:mi:ss') from all_objects; 12. 获得小时数 SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer SQL> select sysdate ,to_char(sysdate,'hh') from dual; SYSDATE TO_CHAR(SYSDATE,'HH') -------------------- --------------------- 2003-10-13 19:35:21 07 SQL> select sysdate ,to_char(sysdate,'hh24') from dual; SYSDATE TO_CHAR(SYSDATE,'HH24') -------------------- ----------------------- 2003-10-13 19:35:21 19 获取年月日与此类似 13. 年月日的处理 select older_date, newer_date, years, months, abs( trunc( newer_date- add_months( older_date,years*12+months ) ) ) days from ( select trunc(months_between( newer_date, older_date )/12) YEARS, mod(trunc(months_between( newer_date, older_date )), 12 ) MONTHS, newer_date, older_date from ( select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date from emp ) ) 14. 处理月份天数不定的办法 select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual 16. 找出今年的天数 select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual 闰年的处理方法 to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' ) 如果是28就不是闰年 17. yyyy与rrrr的区别 'YYYY99 TO_C ------- ---- yyyy 99 0099 rrrr 99 1999 yyyy 01 0001 rrrr 01 2001 18.不同时区的处理 select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate from dual; 19. 5秒钟一个间隔 Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS') from dual 2002-11-1 9:55:00 35786 SSSSS表示5位秒数 20. 一年的第几天 select TO_CHAR(SYSDATE,'DDD'),sysdate from dual 310 2002-11-6 10:03:51 21.计算小时,分,秒,毫秒 select Days, A, TRUNC(A*24) Hours, TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes, TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds, TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds from ( select trunc(sysdate) Days, sysdate - trunc(sysdate) A from dual ) select * from tabname order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss'); // floor((date2-date1) /365) 作为年 floor((date2-date1, 365) /30) 作为月 mod(mod(date2-date1, 365), 30)作为日. 23.next_day函数 next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 4月27日 X.509 在和CA进行一些接触时,我们常常会听到一个名词: X.509。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密,并将之与收到的信息"指纹"进行比较,以确定其真实性。 此问题的解决方案即X.509标准与公共密钥证书。本质上,证书由公共密钥加密钥拥有者的用户标识组成,整个字块有可信赖的第三方签名。典型的第三方即大型用户群体(如政府机关或金融机构)所信赖的CA。 此外,X.509标准还提供了一种标准格式CRL,下面我们就来看一看 X.509标准下的证书格式极其扩展。 目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,但是都在原有版本(X.509 V1)的基础上进行功能的扩充,其中每一版本必须包含下列信息: (1) 版本号 (2) 序列号; (3) 签名算法标识符 (4) 认证机构 (5) 有效期限 (6) 主题信息 (7) 认证机构的数字签名 (8) 公钥信息 1、版本号: 用来区分X.509的不同版本号 2、序列号; 由CA给予每一个证书的分配唯一的数字型编号,当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中;这也是序列号唯一的原因。 3、签名算法标识符: 用来指定用CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法,须向国际指明标准组织(如ISO)注册。 4、认证机构: 即发出该证书的机构唯一的CA的x.500名字; 5、有效期限: 证书有效的时间包括两个日期:证书开始生效期和证书失效的日期和时间。在所指定的这两个时间之间有效; 6、主题信息: 证书持有人的姓名、服务处所等信息; 7、认证机构的数字签名: 以确保这个证书在发放之后没有被撰改过; 8、公钥信息: 包括被证明有效的公钥值和加上使用这个公钥的方法名称; X.509的扩展(V3) X.509标准第三版在V2的基础上进行了扩展,V3引进一种机制。这种机制允许通过标准化和类的方式将证书进行扩展包括额外的信息,从而适应下面的一些要求一: (1)一个证书主体可以有多个证书; (2)证书主体可以被多个组织或社团的其他用户识别; (3)可按特定的应用名(不是X.500名)识别用户,如将公钥同EMAIL地址联系起来; (4)在不同证书政策和实用下会发放不同的证书,这就要求公钥用户要信赖证书;证书并不限于这些标准扩展,任何人都可以向适当的权利机构注册一种扩展。将来会有更多的适于应用的扩展列入标准扩展集中。值得注意的是这种扩展机制应该是完全可以继承的。 每一种扩展包括三个域:类型、可否缺省、值 类型字段定义了扩展值字段中的数据类型。这个类型可以是简单的字符串,数值,日期,图片或一个复杂的数据类型。为便于交互,所有的数据类型都应该在国际知名组织进行注册。 是否可缺省字段是一比特标识位。当一扩展标识为不可缺省时,说明相应的扩展值非常重要,应用程序不能忽略这个信息。如果使用一特殊证书的应用程序不能处理该字段的内容,就应该拒绝此证书。 扩展值字段包含了这个扩展实际的数据。 公开密钥证书的标准扩展可以分为以下几组: · 密钥和政策信息,包括机构密钥识别符、主体密钥识别符、密钥用途(如数字签字,不可否认性 、密钥加密、数据加密、密钥协商、证书签字、CRL签字等),密钥使用期限等; · 主体和发证人属性,包括主体代用名、发证者代用名、主体检索属性等; · 证书通路约束,包括基本约束,指明是否可以做证书机构。 · 与CRL有关的补充; X.509是国际标准化组织CCITT建议作为X.500目录检索的一部分提供安全目录检索服务。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,但是都在原有版本基础上进行功能的扩充,其中每一版本必须包含下列信息: PKI (Public-Key Infrastructure) 公钥体系基础框架。 3月19日 FTP常见反馈信息知识大全230 用户登录 250 请求的文件操作完成 257 创建"PATHNAME" 331 用户名正确,需要口令 332 登录时需要帐户信息 350 请求的文件操作需要进一步命令 421 连接用户过多 425 不能打开数据连接 426 关闭连接,中止传输 450 请求的文件操作未执行 451 中止请求的操作:有本地错误 452 未执行请求的操作:系统存储空间不足 500 格式错误,命令不可识别 501 参数语法错误 502 命令未实现 503 命令顺序错误 504 此参数下的命令功能未实现 530 账号或密码错误 532 存储文件需要帐户信息 550 未执行请求的操作 551 请求操作中止:页类型未知 552 请求的文件操作中止,存储分配溢出 553 未执行请求的操作:文件名不合法 ●400-Bad request失败请求错误(最常见的错误之一) 这个问题在于你输入的网址有错误。有可能是你要连接的服务器不能 识别你要求浏览的文档,或者你没有访问它的权利甚至它根本就是不存在 的。仔细检查一下你是否将网址写错,包括大小写(一般网址是不分大小 写的,可是某些特殊文档例外)、符号或是多打了空格。这是最常见的一 类错误。 ●401-Unauthorized未经过认证的错误 可能是你访问到了有密码保护的站点而你输入的密码不正确。首先你 要确认是否有访问该网站的权利(通常有用户名和密码),密码是严格区 分大小写的,一般是不能匿名的。 ●403-Forbidden禁止访问错误 你可能没有权利访问这个文档,有时某些页面是不允许直接访问的( 没有炼接到上面的页面),当然也有被口令保护的可能。这时你须要回到 上一页面输入口令才能够访问。 ●404-Not found没有找到错误(最常见的错误之二) 这是我们经常遇到的访问出错情况。首先可能是你的网址有错误(漏 字、大小写、符号的差异等),或者是网址最后的扩展名不对,当然也有 可能是这个地址或者页面根本不存在。 ●500-Server Error服务器错误 通常是对方网页程序设计错误而产生的,可能是正在修改和上传网页 ,等待对方网页纠正错误后再试吧。 ●503-Service unavailable服务不可用错误(常见错误之三) 这也有很多可能性:你的ISP服务器死机,你公司的网关断了(如果你 通过单位的局域网上网),或者你自己的系统出问题了。最好的办法是等 一会再试试,如果仍然不行就去看看自己的机器、询问一下网络管理员。 ●Bad file request错误文件请求 二、使用FTP、新闻组、Foxmail和OE、CuteFTP、NetAnts中常见的错误和解决 (二) FTP下载错误资讯: (三) 常见FTP登陆Log资讯 3月12日 最近常用的linux命令ps ax 查看进程
reboot 重启机器
cp -r 复制目录及目录下面的文件
sh & 在后台执行命令
netstat 查看在用端口
ls 显示文件
cd 修改路径
rm -rf 删除文件及文件夹
df 查看磁盘使用情况(df -lh) 12月26日 标准SQL写法的重复列问题(转)oracle有点儿小笨啊。。怎么就找不到呢。。我用眼就能看出来该找哪一条。。
---------------------------------------------------------------
看一个简单的例子: SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30)); 表已创建。 SQL> CREATE TABLE T1 (ID NUMBER, NAME VARCHAR2(30)); 表已创建。 SQL> INSERT INTO T VALUES (1, 'T'); 已创建1行。 SQL> INSERT INTO T1 VALUES (1, 'T1'); 已创建1行。 SQL> COMMIT; 提交完成。 SQL> SELECT ID, NAME FROM T, T1
显然这种写法无论是对Oracle的默认写法,还是对标准SQL写法,都是行不通的,因为Oracle无法确定查询的ID和NAME是属于哪张表的。 那么下面增加一张表: SQL> CREATE TABLE T2 (ID NUMBER, NAME VARCHAR2(30)); 表已创建。 SQL> INSERT INTO T2 VALUES (1, 'T2'); 已创建1行。 SQL> SELECT ID, NAME FROM T, T1, T2
ID NAME 神奇的现象出现了,对于Oracle的默认写法,Oracle仍然报错未明确定义列,但是对于标准SQL写法,居然可以成功执行,而且根据查询结果看,返回的记录是T2表的,那么是否可以这样进行推测,对于标准写法而言,如果查询的时候不指定列的所在表信息,那么Oracle选择最后一个连接表的列。 再做一个简单的例子验证一下这个推测: SQL> CREATE TABLE T3 (ID VARCHAR2(1), NAME VARCHAR2(30)); 表已创建。 SQL> INSERT INTO T3 VALUES ('1', 'T3'); 已创建1行。 SQL> SELECT ID, NAME I NAME 果然如此,只是不知道这个特性是标准函数写法中规定的,还是Oracle自己的特性。 11月13日 POCPOC,是Proof of Concept的缩写,意思是为观点提供证据,它是一套建议的电子模型,它可用于论证团队和客户的设计,允许评估和确认概念设计方案,POC的评价可能引起规格和设计的调整。 1、POC的概念 POC,是Proof of Concept的缩写,意思是为观点提供证据,它是一套建议的电子模型,它可用于论证团队和客户的设计,允许评估和确认概念设计方案,POC的评价可能引起规格和设计的调整。POC流程所产生的关于设计的承诺、大家都认可的意见都将记录在设计的调整文档中,以备查。这样下去,POC不断发展。 如果在完成这些任务时需要帮助,可以在Queensland大学找到协助资源。 2、POC的开发 POC的开发步骤及方法如下: 第一步,开发包含所有基本导航特征(按纽,图标、菜单等)的界面模型,但不是最终的完美形式。 第二步,给界面添加少量内容,尤其是在至关重要的媒体中添加一到两个样本。例如,如果套装软件包非常依赖3D模型,就应该添加一个包含驱动所必须的3D模型样本。如果软件包需要显示数据符号和表格,那么有关数据符号和表格的样本也应添加上。 请注意,这个过程应该用于支持论证和验证设计,而并不是软件包开发的实际开端。你应该尽力去论证和销售设计,但也不要太过分,因为设计过程中有时需要作重大的修改,这样将导致浪费大量的资源。 3、POC的评价和验证 评价和验证过程就是寻求风险承担者通过POC和备案设计文档的反馈。通过POC评价,风险承担者可能提出调整规格和设计的要求。 有时,由于设计存在的缺陷或不适当的地方,设计团队就可能只好回到绘图板。客户可能决定停止设计或寻找其他团队,这是因为设计没有足够地关注客户和使用者的需求,或者是因为客户需求的不稳定性。有时这种改变是由客户组织或者项目决策者所引起的。 通常,在评价和验证过程结束时,有关设计的承诺、大家都认可的意见都将记录在备案的设计文档中,这往往是产品开发的生命周期中一个重要的里程碑。在结束评价和验证之后,POC就可继续发展。 4、最小化的需求 尽管POC是产品开发过程中重要的评估技术,但是你也应该限制在POC开发方面所花费的时间,考虑到早先的设计阶段包含的所有因素,构建POC中关键元素。 应该把充足的精力用于论证和认同设计方面,但也不要过多,这样即使设计中需要作重大的修改,也不会导致浪费大量的资源。 在全面设计开始执行之前,让客户对设计认可是必要的。 5、客户的角色定位 规格和设计阶段,要求产品开发有详细的设计文档,而且POC常伴随着产品开发。客户签署设计文档中,并反馈POC是重要的项目里程碑。如果在下一阶段仍需修改产品设计,就要按照受控的变更控制流程得到认可和批准。在整个项目过程中处理不同的检查和停顿时,客户的一个重要职责是为按期交付而保证已确认的进度表,并同意为防止计划被耽搁而需再投资的情况出现。 10月30日 WSDL概述WSDL就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。 WSDL协议已经被提交给了Internet标准组织W3C审批,目前还处于“确认提交”状态。W3C维持着正规的标准化系统同时提交提案必须经过确定的一套批准过程才能最终成为官方协议。在这种情况下,WSDL的地位,照外行看,至少标准组织在考虑让其成为将来可能标准中的一部分。如果你对这方面的情况感兴趣,或碰巧是一位特关心结果的“失眠症患者”,那么你不妨到W3C网站上去读读有关的建议标准。 用WSDL说明服务 作为一种基于XML的标准,如果你对XML具有一定的了解,那么WSDL的结构对你就不会陌生了。WSDL文档由服务用来描述数据类型的一组元素、服务可以收到的“消息”以及关联每条消息的SOAP绑定组成。 清单A就是一份简单的WSDL文档,该文档同W3C网站公布的WSDL示范文本是一样的,它说明了一种股票行情服务(这也是相当标准的一种Web服务)。 再仔细阅读清单A,你可以看到,文档首先以标准的XML头开头,其中包含了一个版本标识,而文档的根元素则被称为definitions。 Definitions元素可以采用若干种可选属性,这些属性说明文档同时定义文档其余部分使用的名称空间(namespace)。在这种情况下,定义被分配了一个名字(StockQuote),某些名称空间定义是根据以下常规前缀缩写制定的: tns—“this namespace”的缩写,包含被定义服务的主名称空间 xsdl—XML Schema (XSD)名称空间,用于定义文档中的类型 soap—SOAP绑定采用的名称空间 接下来,为了定义服务的接口需要在type元素内定义所需要的任何复杂类型。这里你必须注意使用标准的XSD句法(属性),它是创造数据类型定义最为适合的方法。不过,如果你愿意,WSDL也能扩展使用不同的类型定义系统。 消息概述 按WSDL的用法,消息可以是传递给某一服务公布对象上的方法的任何参数或者方法被调用之后的任何返回结果。为了继续使用股票行情这个Web服务例子,单一定义方法多半如以下伪代码所示: floatgetLastTradePrice(string tickerSymbol) 这样,就像你从清单A所看到的那样,文档中定义了两条消息,一条代表方法的输入参数tickerSymbol(GetLastTradePriceInput消息)另一条代表该方法的返回值(GetLastTradePriceResult消息)——最新的股票价格。 操作把消息组织到一起而且抽象地代表方法定义。在我们的例子中,这两条消息都在 GetLastTradePrice操作元素下的getLastTradePrice对象方法定义中组织起来。在一个 WSDL文件中的所有操作又都挨个在portType元素内分组。 WSDL文档的余下部分采用服务器上的侦听端点(binding 元素)绑定消息同时把端口定义同单一服务实体(service元素)组合起来。清单A的例子就定义了通过SOAP采用服务所需要的绑定。 WSDL工具 你可以手工创建WSDL文件,不过,你还可以采用相当多的工具通过WSDL来为你自动处理和定义Web服务。推荐工具软件如下: Omniopera—一图形用户界面的WSDL、XML和XSD编辑器 Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序 IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序 10月29日 Web Services 简介Web Services 是一种构建应用程序的普通模型,并能在所有支持 Internet 通讯的操作系统上实施运行。Web Services 令基于组件的开发和 Web 的结合达到最佳,基于组件的对象模型,如:Distributed Component Object Model(DCOM)、Remote Method Invocation(RMI),Internet Inter-Orb Protocol(IIOP)都已经发布了很长时间了,但是这些模型都依赖于特殊对象模型协议,而 Web Services 利用 SOAP 和 XML 对这些模型在通讯方面作了进一步的扩展以消除特殊对象模型的障碍。 Web Services 主要利用 HTTP 和 SOAP 协议是商业数据在 Web 上传输,SOAP通过 HTTP 调用商业对象执行远程功能调用,Web 用户能够使用 SOAP 和 HTTP通过 Web 调用的方法来调用远程对象. Web Services 结构 客户根据 WSDL 描述文档,会生成一个 SOAP 请求消息。Web Services 都是放在Web服务器(如IIS)后面,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到 Web 服务器来。Web 服务器再把这些请求转发给 Web Services 请求处理器。请求处理器的作用在于,解析收到的 SOAP 请求,调用 Web Services, 然后再生成相应的 SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。 Web Services 体系 Web Services 体系主要包括以下几个方面: ① Web Services 组件。包括 3 种组件: 服务提供者:提供服务,进行注册以使服务可用; 服务代理:服务交换所,服务提供者和服务请求者之间的媒体; 服务请求者:向服务代理请求服务,调用这些服务创建应用程序。 ② Web Services 操作。包括 3 种操作: 发布/不发布(Publish/Unpublish):提供者向代理发布(注册)服务或不发布(移 去)这些服务的注册; 发现(Find):由服务请求者向服务代理执行 find 操作,服务请求者描述要找的 服务,服务代理分发匹配的结果; 绑定(Bind):在服务请求者和服务提供者之间绑定,这两部分协商以使请求者 可以访问和调用提供者的服务。 ③ UDDI——通用发现、描述和整合。 这是一个Web Services的信息注册规范,基于UDDI的Web Services注册可以被发现 UDDI 的发现方法是:在 Web 上有一种分布的注册服务,商务和服务以一种通用的 XML 格式描述,XML 中的结构化数据易于发现、分析和操作。 ④ WSDL——Web 服务描述语言。 Web 服务描述言语(WSDL)是一种 XML 语法,为服务提供者提供了描述构建在不同协议或编码方式之上的 Web Services 请求基本格式的方法。WSDL 用来描述一个 Web Services 能做什么,它的位置在哪里,如何调用它等。在假定以SOAP/HTTP/MIME 作为远程对象调用机制的情况下,WSDL 会发挥最大作用。UDDI 注册描述了 Web Services 绝大多数方面,包括服务的绑定细节。WSDL 可以看作是 UDDI 服务描述的子集。 WSDL 将服务定义为一个网络端点的集合,或者说端口的集合。在 WSDL 里面,端点及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的。这样就可以重用这些抽象定义:消息,需要交换的数据的抽象描述;端口类型,操作的抽象集合。针对一个特定端口类型的具体协议和数据格式规范构成一个可重用的绑定。一个端口定义成网络地址和可重用的绑定的连接,端口的集合定义为服务。因此一个 WSDL 文档在定义网络服务的时候使用如下的元素: 类型——使用某种的类型系统(如 XSD)定义数据类型的容器; 消息——通讯数据抽象的有类型的定义; 操作——服务支持动作的抽象描述; 端口类型——一个操作的抽象集合,该操作由一个或多个端点支持; 绑定——针对一个特定端口类型的具体协议规范和数据格式规范; 端口——一个单一的端点,定义成一个绑定和一个网络地址的链接; 服务——相关端点的集合。 所以不难看出,WSDL 给客户提供了一个模板,方便客户描述和绑定服务 编辑本段Web services 工作原理基础的 Web Services 平台是 XML + HTTP。HTTP 协议是最常用的因特网协议。 XML 提供了一种可用于不同的平台和编程语言之间的语言。 Web services 平台的元素: SOAP (简易对象访问协议) UDDI (通用描述、发现及整合) WSDL (Web services 描述语言) XPath XPath 简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。 什么是 XPath? XPath 使用路径表达式在 XML 文档中进行导航 XPath 包含一个标准函数库 XPath 是 XSLT 中的主要元素 XPath 是一个 W3C 标准 XPath 路径表达式 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。 XPath 标准函数 XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。 XPath 在 XSLT 中使用 XPath 是 XSLT 标准中的主要元素。如果没有 XPath 方面的知识,您就无法创建 XSLT 文档。 XQuery 和 XPointer 均构建于 XPath 表达式之上。XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。 您可以在我们的《XQuery 教程》中阅读更多有关 XQuery 的知识。 XPath 是 W3C 标准 XPath 于 1999年11月16日 成为 W3C 标准。 XPath 被设计供 XSLT、XPointer 以及其他 XML 解析软件使用。 XPath 节点 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。 XPath 术语 节点(Node) 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。 编辑本段XPath存取函数名称 说明fn:node-name(node) 返回参数节点的节点名称。 fn:nilled(node) 返回是否拒绝参数节点的布尔值。 fn:data(item.item,...) 接受项目序列,并返回原子值序列。 fn:base-uri() fn:base-uri(node) 返回当前节点或指定节点的 base-uri 属性的值。 fn:document-uri(node) 返回指定节点的 document-uri 属性的值。 10月28日 居然要学习写批处理啊。。批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。 任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 <Call> <If> <Choice> <Pause> <Echo> <Rem> <For> <Shift> <Goto> ================================================================ 常用命令 echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 ==== willsort 编注 =================================================== 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY命令文件连接符 * ? 文件通配符 "" 字符串界定符 | 命令管道符 < > >> 文件重定向符 @ 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. 第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中. ================================================================ echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 ==== willsort 编注 ==================================================== 此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理 ---------------------------------------------------------------------------- ECHO 当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。 在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。 使用ECHO命令可关闭此功能。 语法 ECHO [ON|OFF] 若要用echo命令显示一条命令,可用下述语法: echo [message] 参数 ON|OFF 指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO 命令。 message 指定让MS-DOS在屏幕上显示的正文。 ---------------------------------------------------------------------------- CALL 从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。 语法 CALL [drive:][path]filename [batch-parameters] 参数 [drive:][path]filename 指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。 batch-parameters 指定批处理程序所需的命令行信息。 ---------------------------------------------------------------------------- PAUSE 暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处 理程序中使用该命令。 语法 PAUSE ---------------------------------------------------------------------------- REM 在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS 中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代)。 语法 REM [string] 参数 string 指定要屏蔽的命令或要包含的注解。 9月24日 RosettaNet 简介(2)RosettaNet 、实现 和 Web Services 要了解 RosettaNet 如何影响 Web services ,我们从定义 Web services 开始。术语 Web services 指的是使用 SOAP 和 WSDL 来描述和访问网络上的服务。许多公司已认识到使用 Web services 来实现其业务流程的好处。这包括 Web services 所基于的开放标准、面向服务的方法及实现的灵活程度,从而允许重用现有的基础设施和技术。所有这些听起来都非常熟悉,而且此时您可能会想,“如果能使用 Web services 实现自己的业务流程,那么使用 RosettaNet 的利益又何在?”为了回答这个问题,我们需要更详细地查看业务流程并理解公共过程和私有过程之间的区别。 业务流程由一组步骤组成,当执行时,这些步骤实现某个业务目标。 RosettaNet Implementation Framework (RNIF) 将私有过程定义为公司的内部业务流程,将公共过程定义为与贸易合作伙伴的相关交互。首先,我们设想一个简单的业务流程:请求报价。客户通过发送一个包含报价说明书的消息,向供应商发出报价请求。供应商检查产品清单中项目的可用性,如果符合报价要求,则向客户发送报价。如果供应商无法满足报价要求,则它可能为该客户确定另一个供应商。在这种情况下,向客户发送推荐。
在本例中,在供应商的产品清单中查检项目可用性和确定备选供应商都是内部过程,这些过程对于客户而言不是可见的,而且不涉及贸易合作伙伴。因此这样的过程是私有的。通常,各公司都有其自己的遵循自己内部标准的私有过程定制实现。它们可能利用 Java 、 CORBA 、 Web services 或遗留技术的任何组合。在实例的第一步中,客户向供应商发出了报价请求;这是公共过程。使用 Web services 单独实现这一步的问题在于,在贸易合作伙伴之间没有明确定义的对话,我们很快便会遇到 EDI 所面临的关键问题:对于我们要合作的每一个贸易合作伙伴,我会分别不同地实现该服务。通过确保该公共过程的 Web services 实现遵循 RosettaNet 标准,我们可以向经营同一业务的任意数量的贸易合作伙伴请求报价,而无需每次都做重复工作。因此, RosettaNet 和 Web services 是令人称道的, Web services 担当 RNIF 的实现机制。然而,应当强调的是,我们并不限于将 Web services 用作 RosettaNet 的实现。私有业务流程可以用任何适当的技术(包括 Web services )来实现,但是要确保当该标准 B2B 在贸易合作伙伴之间通信时公共过程遵循 RosettaNet 规范,这样才有意义。在典型的实现模型中,我们可能期望找到要用于处理私有业务流程的定制 Web services 和符合 RosettaNet 的服务来处理公共过程。
RosettaNet 标准
RosettaNet 标准为电子商务标准化提供一个健壮的、非专有的解决方案,它是免费的,可以通过 RosettaNet 网站公开。这些标准是由全球领先的高科技公司通力协作而开发出来的。通过遵循这些标准,贸易合作伙伴、解决方案提供商及系统集成商可以利用这些专业技术和经验。此外,通过采用 RosettaNet ,贸易合作伙伴可以从可重复规范和准则的全局框架中受益,该框架允许调节和自动化实时的、服务器到服务器的事务,这意味着获得了跨整个供应链的全局事务可视性和一致性。使用这些标准化过程,还让贸易合作伙伴降低了成本、更快速地响应客户请求,而且它还可以提升效率、保证高度完整的数据处理。这些标准涵盖以下核心领域:
· 合作伙伴接口过程( Partner Interface Processes )
· RosettaNet 实现框架( RosettaNet Implementation Framework )
· RosettaNet 业务和技术字典( RosettaNet Business and Technical Dictionaries )
RosettaNet 简介(1)B2B 集成的技术目标是自动化业务流程,从而减少与手工流程相关的传统处理延迟和低效率。如果我们将电子商务视为业务社区和业务信息数字化的网络,则一般会把 EDI (Electronic Data Interchange) 视为电子商务的开端。 EDI 的主要目的是通过制定标准数据传输协议,避免和防止在贸易合作伙伴之间读取和处理信息过程中出现其他人为干预。自 1960 年以来,大型组织一直投资于 EDI 开发,然而直到 80 年代它才为人们所接受,而且 EDI 还从未达到基于 Web 的电子商务的流行层次,原因如下: · EDI 的高成本阻止了中小规模企业参与电子交易。 · 缓慢的标准开发过程阻碍了 EDI 的成长。 · 开发 EDI 应用程序的复杂性将对其的采纳限制在一个狭小的用户基数上。 · EDI 解决方案带来了自身的维护和管理开销。
从 EDI 汲取的教训及其技术的先进性带来了解决 B2B 集成问题的新方法;在供应链管理领域, RosettaNet 已出现流行趋势。 RosettaNet 于 1998 年 2 月成立于美国,是一个由 500 余家公司组成的独立的非赢利性联盟。这些公司包括一些世界领先的电子组件、计算机和日用电子、半导体制造、电信及物流公司。 2002 年 , RosettaNet 与 Uniform Code Council, Inc.? (UCC)? 进行了合并,以支持它们所服务的行业的开放电子商务过程标准的采用和开发。
RosettaNet 是什么?
RosettaNet 这一名字源自于 1799 年在埃及发现的 Rosetta Stone 。这要追溯到公元前 196 年,该石头是在 Rosetta (Rashid) 镇附近被人发现的,上面用两种不同的语言以三种不同的笔体镌刻了同一消息。使用希腊语,学者们可以译解该象形文字。 RosettaNet 这一名字非常类似于 18 世纪发现的 Rosetta Stone ,它是一个业务协议,通过为电子商务制定全球性语言,企业可以克服在 Internet 上经营业务的障碍。
简而言之, RosettaNet 的主要目标集中在供应链及其优化上,它通过增强的 B2B 集成提高其效率和性能。 RosettaNet 电子商务过程标准旨在提高速度、效率和可靠性,允许在贸易合作伙伴间进行更大规模的协作和交流。 RosettaNet 提供一个公共交流平台,也可以说是一种公共语言,它允许参与业务流程的不同贸易合作伙伴自动化流程并在 Internet 上执行。该公共平台解决了 EDI 的主要成本开销之一:业务流程中贸易合作伙伴的 IT 部门必须为与其交互的各贸易合作伙伴设计、实现和测试定制业务流程。与 EDI 和早期的 B2B 集成工作不同, RosettaNet 已完全设计用于与安全性的结合和按需集成;这使得原本要花费数日的传统业务事务批处理可以在几分钟之内迅速完成。
EDI 和 RosettaNet 之间的主要区别在于, EDI 在公司之间交换文档,而 RosettaNet 跨网络定义业务流程并对其进行集成,以确定最佳操作过程。大量的案例分析已显示, RosettaNet 带来了胜过 EDI 的多种利益。普遍认为带来的利益如下:
· 更轻松、更经济高效的实现,投资回报 (ROI) 更大
· 自动化更加大量的业务流程的能力
· 相对于批处理的实时事务处理
· 更高的可伸缩性
RosettaNet 和 ebXML
通过考察其他基于 XML 的 B2B 集成项目(即 ebXML ),我们尝试将 RosettaNet 与其进行比较。人们常常将 ebXML 描述为横向 B2B 标准,意思是有一组用于所有电子商务的规范;它是通用的而不针对任何特殊部门或行业。而另一方面, RosettaNet 是一个纵向标准;它关注特定行业的需要(例如,电子部件制造商)以及供应链自动化和优化的业务范畴。自两个项目创建以来,各自标准中的规范已存在着某些重复和交叉。或许让这些标准彼此适应的最佳方式是考虑把 RosettaNet (纵向)插入到 ebXML (横向)中。关于这方面有一个很好的实例,使用 ebXML Business Process Specification Schema (BPSS) 来描述 RosettaNet Partner Interface Processes (PIPs)? 。正如我们稍后即将看到的, PIP 定义了合作伙伴之间的业务流程。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|