软件代码
开发工具支持的语言写的源文件
软件代码就是程序员用开发工具所支持的语言写出来的源文件。它是一组有序的数字或字母的排列,是代表客观实体及其属性的符号。
代码
代码就是程序员用开发工具所支持的语言写出来的源文件
代码是一组有序的数字或字母的排列,是代表客观实体及其属性的符号。
代码设计的原则包括惟一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。
源代码
source code
源程序是指未编译的文本代码。
目的
验证码主要是为防止暴力破解,所以需要防止图片识别。所以验证码一般情况下为书写不正规,且有随机的背景杂点,或杂线源代码(也称源程序),是指一系列人类可读的计算机语言指令。
在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
作用
源代码主要功用有如下2种作用:生成目标代码,即计算机可以识别的代码。对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。
需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。
代码组合
源代码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程序不必用同一种格式的源代码书写。例如,一个程序如果有C语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。
较为复杂的软件,一般需要数十种甚至上百种的源代码的参与。为了降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。
还有另外一种组合:源代码的编写和编译分别在不同的平台上实现,专业术语叫做软件移植。
版权
如果按照源代码类型区分软件,通常被分为两类:自由软件和非自由软件。自由软件一般是不仅可以免费得到,而且公开源代码;相对应地,非自由软件则是不公开源代码。所有一切通过非正常手段获得非自由软件源代码的行为都将被视为非法。
质量
对于计算机而言,并不存在真正意义上的“好”的源代码;然而作为一个人,好的书写习惯将决定源代码的好坏。源代码是否具有可读性,成为好坏的重要标准。软件文档则是表明可读性的关键。
效率
虽然我们可以通过不同的语言来实现计算机的同一功能,但在执行效率上则存在不同。普遍规律是:越高级的语言,其执行效率越低。这也是为什么汇编语言生成的文件比用VB语言生成文件普遍要小的原因。
其他信息
软件代码是一种有价值的资源,许多公司竭尽全力保护它们的源代码,完全反对“自由软件基金会(Free Software Foundation)”或开放源码运动的观点。但是,在密码情况中,将算法完全地无偿地公之于众,接受大众的详细审查是必要的。在字处理程序情况中,这可能会使人不快,但如果出现一些错误或其它问题,通常也没有太大关系。错误是一定存在的,即使没有那种急于推出不成熟产品的倾向。在加密软件或至少其中的密码部分的情形中,错误是非常危险的,会产生极端严重的后果。发现这样的缺陷的唯一切实可行的方法是公开内部代码,让其他人进行同级评估与分析。简单地说:不要相信,也不要使用任何其核心部分(包括加密算法)不可公开访问、而且尚未同意同级评估的加密软件。密码发展的历史显示了众多证明这一策略的实例。
1976 年撰写的论文 New Directions in Cryptography 包含了设计一个具有公/私钥对系统的协议的详细信息;随后这一算法以两位作者的姓名:Whitfield Diffie 和 Martin Hellman(他们当时在斯坦福大学)命名。Diffie-Hellman 算法在公共领域中广泛使用, 作为大量被称为公钥系统的基础。
公钥系统使用两个由质数构成的、互补的密钥,使得一个密钥用于加密明文,然后可以用另一个且只能用这个密钥来解密。这也称为非对称密码术
密钥对中一个密钥秘密保管,称为私钥,而另一个是公钥,它被广为公开。这一过程独特的本质是:任何知道我的公钥的人都可以加密一条消息,然后只能由我有使用安全的私钥才能解密这条消息。相反,我可以用我的私钥加密一条消息,任何使用我自由可用的公钥解密它的人都可以确信这条消息是我发出的。实际上,情况要比这复杂得多,因为非对称密钥与对称密钥相比,通常都很长(大约 768 位相对于 56 或 128 位),所以处理文本会很慢。其中一个最广泛使用的公钥系统是 1977 年由三个 MIT 的研究人员:Ron Rivest、Adi Shamir 和 Leonard Adelman 利用 Diffie 和 Hellman 引入的概念开发的。这一系统以他们姓名的首字母 RSA 命名,并于 1983 年在美国获得专利。
遵从前面提到的警告和条件,公钥系统也可以是无懈可击的。对这种系统的攻击方法通常是尝试对数字进行因数分解,而对大质数的因数分解是极其困难的。但是,也可以采用其它方法,完全有可能发现新的数学技术,严重危及这些密码中的一个或多个,或致使密码完全无效。而且,就象密钥密码术会因在分发时单个密钥落入坏人之手而易受攻击一样,公钥密码术也容易受到称为内奸的风险的攻击。稍后将对此进行更完整地讨论,但是本质上这是愚弄用户:让用户相信公钥来自某个源的,而实际上它是来自另一个源。出于这一原因,公钥密码术通常都与其它安全性方法(如数字证书,它寻求确认公钥的完整性)相关联。显然,私钥被人知道后,系统也是易受攻击的,但因为一般不需要共享私钥,所以这一风险不会很大。
我在前面曾提到,消息认证正变得与信息隐藏一样重要了。这里需要的是一种机制,使接收方放心:消息真的是来自所声称的发送方,并且自它创建以来没有被改过。通常,通过使用散列技术生成消息摘要来提供消息的完整性。散列是一种将变长字符串转换为定长结果(一般 128 位)的技术。实际上,对消息所做的任何更改 — 即使只是象添加或除去一个空格这样细微的更改 — 都会导致在运行进程时创建一个不同的散列值。
下面这个简化的模型显示了这些不同元素如何在一起工作,以保护消息不会被随意查看,并且确信接收到的消息是我(授权发送方)发出的:
我对明文消息应用一个适当的处理,以生成一个用作消息摘要的散列值
我用私钥加密这个摘要,而不是消息本身,向任何可以用公钥解密它的人确认消息是我发出的。
我生成一个一次性使用的密钥,用来迅速加密消息文本。
我使用接收方的公钥加密这个密钥并将整个包发送给他。
我的收件人使用他的私钥获得这个密钥,接着用该密钥解密消息,对消息应用相同的消息摘要算法,并将其与使用我的 公钥解密的消息摘要进行比较。倘若它们匹配,他就可以确定消息是我发出的,而且没有被更改过。
虽然实际应用可能要复杂些,但这基本上就是使用非常广泛的程序 — “PGP 加密软件(Pretty Good Privacy,PGP)”和其它一些应用程序的工作原理, 它们极好地以一种有效而快速的方法结合了一起工作的各种互补元素。
结束语
安全性在于管理风险,而不是排除风险。密码术是任何安全性策略的一个重要组成部分,它正越来越多地在大量情形中在幕后使用。计算机技术的发展意味着,早期曾被认为是十分安全的密码,可能已不再安全了,或只有适度的安全性。同时,在使用新算法或早期算法的变体时,上述的这些发展也使得在合理的期限内使用越来越长的密钥成为可能。诸如椭圆曲线(elliptic curve)或量子密码术(quantum cryptography)等一些技术都展示了相当可观的前景,但是它们对于常规使用仍可能过于深奥。
为了所有实际用途,在任何合理的时间段实现完全安全的系统是极可能的。接下来的问题是如何实现一个这样的系统,以及如何理解在机器和人类术语方面的含义。还有一点:虽然绝对认证似乎是一个有吸引力的选项,但是它有相当的风险 — 如果某人的数字身份被盗,则结果会是灾难性的。政府将密码系统当作战略资源,并希望控制它们的分发和使用,尽管政府有各种关于出口和使用的宽松的法规,但仍越来越担心它们提供的内容。虽然它们可能不愿承认这一点,但如果不对公认的行为自由实施严格限制的话,则它们正在进行的是一场不可能获胜的战斗。
对于开发人员,在开发使用加密技术的应用程序和掌握各种系统的优缺点,以及在组织的约束内如何正确管理一些安全性风险等方面都有相当多的机会。
参考资料
最新修订时间:2023-05-18 17:43
目录
概述
代码
源代码
参考资料