軟體代碼

軟體代碼

代碼就是程序員用開發工具所支持的語言寫出來的源文件。它是一組有序的數字或字母的排列,是代表客觀實體及其屬性的符號。

基本介紹


軟體代碼
軟體代碼

代碼


代碼就是程序員用開發工具所支持的語言寫出來的源文件
代碼是一組有序的數字或字母的排列,是代表客觀實體及其屬性的符號。
代碼設計的原則包括惟一確定性、標準化和通用性、可擴充性與穩定性、便於識別與記憶、力求短小與格式統一以及容易修改等。

源代碼


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)等一些技術都展示了相當可觀的前景,但是它們對於常規使用仍可能過於深奧。
現在,為了所有實際用途,在任何合理的時間段實現完全安全的系統是極可能的。接下來的問題是如何實現一個這樣的系統,以及如何理解在機器和人類術語方面的含義。還有一點:雖然絕對認證似乎是一個有吸引力的選項,但是它有相當的風險 — 如果某人的數字身份被盜,則結果會是災難性的。政府將密碼系統當作戰略資源,並希望控制它們的分發和使用,儘管政府有各種關於出口和使用的寬鬆的法規,但仍越來越擔心它們提供的內容。雖然它們可能不願承認這一點,但如果不對公認的行為自由實施嚴格限制的話,則它們正在進行的是一場不可能獲勝的戰鬥。
對於開發人員,在開發使用加密技術的應用程序和掌握各種系統的優缺點,以及在組織的約束內如何正確管理一些安全性風險等方面都有相當多的機會。