C/C++/C#/Java分類文章 顯示方式:簡文 | 列表

2011年11月3日

OpenSSL - SOD 與 ASN1 解讀

在上一篇《SOD 安全文件概論》中,我直接使用工具 openssl 解讀 SOD 的內容。但它只是按照各項資料的結構順序,用粗略的格式顯示資料內容。本文則是直接用 OpenSSL C 函數庫解讀 SOD 內容。

由於本文案例中的 SOD 採用 ASN.1 格式儲存,所以解讀 SOD 的工作實際上就是 ASN.1 文件的解讀工作,需要利用 OpenSSL C 函數庫中與 ASN.1 相關的函數。不幸的是,在已經很貧乏的 OpenSSL C 函數庫文件中, ASN.1 函數更是連份說明文件都沒有。如果不直接去讀 OpenSSL 的 C 源碼,可能根本寫不出 ASN.1 解讀程式。在此提供大家一個指引方向,想要進行這項挑戰的人,只需要去讀 OpenSSL C 源碼的 crypto/asn1/asn1_par.c 這份源碼文件。本文也沒有足夠的資訊仔細說明那些 C 函數的用法。

...繼續閱讀

shirock 發表於 樂多14:26回應(0)引用(0) │標籤:openssl

2011年08月11日

OpenSSL Library - EVP, Digest and Cipher

EVP 是 OpenSSL 提供的高階資料編碼函數群,參見[evp(3)]。OpenSSL 的 crypto 函數庫實作了許多資料編碼方法,例如:

  • 採用 MD2, MD4, MD5, SHA 等雜湊演算法的資料摘要函數。
  • 採用 RC2, RC4, RC5, DES, IDEA, blowfish 演算法的對稱式加密函數。
  • 採用 DSA, RSA 演算法的非對稱式(公鑰)加密函數。

程序員可以直接調用那些函數處理資料。但是 EVP 提供了更高一層的抽象化介面,讓我們可以寫完一遍程式碼後,僅需抽換編碼模組,就可以支援多種編碼方法。在實際應用中,透過 OpenSSL 交換資料的雙方,並非事先談好要用什麼編碼方法,而是將自己使用的編碼方法之代號加註於資料檔頭。接收方解密資料時就是根據此編碼代碼,用 EVP 載入相同的編碼模組。

...繼續閱讀

shirock 發表於 樂多15:56回應(0)引用(2) │標籤:openssl,md5,crypto

2011年08月8日

OpenSSL Library - BIO 概論

BIO 是 OpenSSL 庫為了處理資料輸出入所設計的輸出入抽象層,參考《bio(3)》的說明。 OpenSSL 的程式碼經常利用 BIO 的多形性,故在使用 OpenSSL 開發應用程式時,必須先熟悉 BIO。

BIO 的設計模式是 C 語言 (不是C++) 實作個體導向程式設計多形性(polymorphism of OOP)時常見的設計方式。 在早期,程序員學了 OOP 的觀念可是還是要寫 C 程式的時代,我們需自己用 C 語言實作類別繼承、動態連結等內容。但我們用的是 C compiler 而非 C++ compiler ,所以很多事我們必須自己處理。 因此它們的程式碼與近代 C++ 式的表達方式有所差異。 例如我在《程式語言中的介面,在個體之間協議互動行為的多種形式》說的作法就是一例;GNOME Library 也是這種用 C 語言寫出來的「類別庫」。 所以 BIO 實際上是一種類別庫。

...繼續閱讀

shirock 發表於 樂多16:03回應(0)引用(3) │標籤:openssl

2011年07月27日

OpenSSL Library - 讀取 X509 certificate 的資訊

前陣子完成一個案子,這案子要驗證 RFID 卡的文件內容是否可信。 本文內容是工作過程中寫出來的一個練習程式與小工具。 此工具用途為查看本地的 X509 證書資訊,並回報其是否有效。 工具名稱為 x509-cert-info。

程式內容使用了 OpenSSL 函數庫。OpenSSL 函數庫內容很多,但公式文件的內容很少,就是些草稿。 我將陸續整理工作過程中得到的相關經驗,記錄在部落格上。

...繼續閱讀

shirock 發表於 樂多17:32回應(0)引用(4) │標籤:openssl,certificate,X509

2011年06月7日

Vala - system signal agent

Unix系統的行程間通訊機制中,有一套稱為 signal 的信號機制。因為它被列在 POSIX 規範之中,所以本文將以 Posix signal 稱之。Psoxi signal 是一種簡單的事件通知機制。它將某些事件予以編號,例如 SIGHUP, SIGTERM 等。程序可以向系統註冊這些信號的處理函式。當特定事件發生時,系統就會打斷程序目前的流程,將執行點轉移到程序指定的處理函式。

然而從設計模式的眼光來看,Posix signal 對程序而言是 Singalton 模式,它只有一個實體。所以同一時間,每一個 Posix 信號只能註冊一個處理函式。當你的程序內有多個單元關心同一個 Posix 信號時,程序員必須要另行安排登記與分派機制,以免不同的單元彼此爭搶 Posix 信號的處理權。 GNOME 環境的程序員,可以利用 GObject 型別機制提供的 GObject signal 機制,實現 Posix signal 的分派機制。

...繼續閱讀

shirock 發表於 樂多14:17回應(0)引用(0) │標籤:vala,signal,posix,gobject

2011年02月14日

Vala with GNU gettext

Vala 作為 GNOME 開發環境下新興的開發語言,帶入了許多新的功能,其中亦包含國際化(i18n)的支援項目。 儘管 Vala 的線上教學文件沒有隻字片語提到 i18n/l10n,但事實上 Vala 已經將 GNU gettext 作為內建的語言功能,使用它實現 i18n/l10n 能力。 Vala 提供了名為 _ 的函數,只要我們的 vala 程式碼使用了 _() 函數,就會使用 GNU gettext 取得本地訊息。

但是現階段使用這個內建功能時,還有一個文件未記載的不完善之處必須解決。待我說來。

...繼續閱讀

shirock 發表於 樂多17:22回應(1)引用(1) │標籤:vala,gettext,i18n

2010年11月25日

Vala - load dynamic library / shared object

Vala 有許多途徑可以整合 C 語言程式,例如在《Vala 程式語言入門》中,我示範了在源碼層級上整合 Vala 程式碼與 C 程式碼。除此之外,我們更常面臨的情況則是要在 Vala 程式碼中調用二進位碼函數庫的內容。在這方面, Vala 也提供了適當的支持。Vala 可以透過連結或是動態載入的方式連結函數庫,調用函數庫的內容。這也讓我們易於整合既有的 C 語言函數庫。

本文首先以 C 語言撰寫一個 md5sum() 並將其存入一個動態函數庫(dynamic library, Unix界的傳統說法稱為 shared object)。再分別透過動態連結以及動態載入兩種途徑,于 Vala 程式碼中調用此函數。

...繼續閱讀

shirock 發表於 樂多17:04回應(1)引用(0) │標籤:vala,dlopen,gmodule

2010年08月25日

Vala 程式語言入門

介紹

如果你知道 "C with Classes" 甚至曾經用過,那麼對於 Vala 的運作方式,想必也會感到熟悉。我認為「 Vala 是 "C with GObject" 的編譯器」 (Vala is a C with GObject compiler) 是非常貼切的介紹描述。

Vala is a new programming language that allows modern programming techniques to be used to write applications that run on the GNOME runtime libraries, particularly GLib and GObject.
Vala Tutorial
...繼續閱讀

shirock 發表於 樂多16:02回應(0)引用(2) │標籤:vala

2010年08月24日

Vala - Time and Log

This article describes two things about Vala programming. First, how to get current time and output it as a formatted timesamp. Second, how to design custom log.

...繼續閱讀

shirock 發表於 樂多17:59回應(0)引用(0) │標籤:vala

2010年08月11日

Java Spring framework 開發人員面試題

日前我指導公司一位新進人員學習 Java Spring framework 的基礎觀念。在這個過程中,我留意到 Java Spring framework 一些相當基礎而簡單的觀念很適合設計成問答題。所以我設計了三道連環的試題,檢視開發人員是否真的搞懂了。

唉,為什麼我這個討厭 Java 語言的人還會跑去指導別人關於 Java Spring framework 的事呢?總歸一句話:人在江湖身不由己。我也是要混飯吃的,就別問我原因了。

...繼續閱讀

shirock 發表於 樂多17:26回應(2)引用(1) │標籤:spring,java
 [1]  [2]  [3]  [4]  [5]  [6]  [最終頁]