2009年2月7日 星期六

RSA 混合 TripleDES 加密

使用TripleDES 加密檔案,並使用 RSA 加密 TripleDES 所產生的 Key 與 IV

以另一種方式來達成→公鑰加密 檔案 →私鑰解密 檔案


另有

壓縮後加密 → 解密後解壓縮

2009年2月4日 星期三

C++ 學習筆記 入門教學

原文





入門基礎
學習程式語言第一件事,通常就是先作個簡單的程式來運行一下,並從瞭解程式語言的資料型態、變數與流程控制語法開始。
  • 資料型態與變數
無論如何 先來個 "Hello! World!" 顯示一下程式執行結果,增加一點撰寫程式的信心!接著就耐心的瞭解一下 C++ 的資料型態,以認識一下變數、常數。
  • 運算
程式的目的簡單的說就是運算、運算還是運算,加減乘除這類的動作是少不得的,在C++中提供運算功能的就是運算子(Operator)。
  • 流程控制
流程控制語法是程式設計的基本,藉由各種條件判斷與迴圈重覆執行語法,您可以令您的程式因應不同的狀況而作出不同的回應。
進階型態
陣列、字串、指標這幾種C++的進階型態相當常被使用,雖然看似複雜,但彼此之間互有相關。

  • 陣列(Array)
各種型態的陣列各有其不同的用途,但無論如何,先從基本型態的一維陣列、二維陣列開始認識起。
  • 向量(Vector)
C++提供了內建陣列的替代型態 vector,vector 可以如同陣列一般的操作,並記得自己的長度資訊,您也可以使用物件的方式來操作 vector 。
  • 字串(String)
字串的本質是字元陣列,而在C++中還可以使用string類別來表現字串,兩者都有瞭解的必要。
  • 指標(Pointer)
指標可指向一個記憶體位址,可對物件作間接操作,指標擁有型態,這用來告訴編譯器如何解釋記憶體空間的內容,以及每一次運算的大小。


函式
程式中超過兩次以上重複使用的程式碼,可以考慮將之定義為函式,以便重覆呼叫使用,降低相同程式片段的維護成本。

  • 函式入門
先簡介一些與函式定義相關的幾個語法,並談談幾個變數可視範圍的議題。
  • 進階議題
遞迴呼叫、傳值、傳址、傳參考等,這些議題在函式的使用上關乎執行資源的使用與效率問題。


物件基礎
以物件為基礎的程式設計,將程式中互動的單元視為一個個的物件。
  • 封裝(Encapsulation)
封裝物件資訊是第一步,您要瞭解如何使用類別定義物件,像是定義物件的屬性、行為等等,類別是建構物件 時所依賴的規格書。
一些有關於指標、運算子重載、特殊型態類別的相關議題。


物件導向
以物件為基礎作延伸,多型(Polymorphism)操作為設計時的核心,於執行時期 動態繫結(Dynamic binding)以決定物件的行為。
  • 繼承(Inheritance)
您可以繼承某個(父)類別的定義並加以擴充,而制訂出一個新的(子)類別定義。
多型操作在物件 導向設計中伴演著極重要的角色,使用的適當與否,足以 影響程式的架構與未來的可維護性。
例外處理(Exception Handling)
例外(Exception)是程式執行時期可偵測到的異常狀況,C++的例外處理包括兩部份:例外的丟出(throw)與例外的捕捉(catch)與處 理。

範本(Template)、名稱空間(Namespace)
範本(Template)提供被參數化的型態(Parameterized Types)功能,將型態相依與非型態相依的演算法分離開來;名稱空間則提供一個名稱管理容器,減低名稱衝突的機會發生。
輸入/輸出
來看看 C++ 中如何處理輸入/輸出,像是格式控制、檔案 I/O 等。
  • 格式控制與 <<、>> 運算子重載
首先來看看基本的格式控制,以及 << 、 >> 運算子的重載。
檔案的輸出輸入是 I/O 的基本,為認識 I/O 的入門必學。
附錄


Sun OpenSource Community Day
















Design Pattern 設計模式

原文
Gof 模式
Creational 模式
物件的產生需要消 耗系統資源,所以如何有效率的產生、管理 與操作物件,一直都是值得討論的課題, Creational 模式即與物件的建立相關,在這個分類下的模式給出了一些指導原則及設計的方向。

  • Structural 模式
如何設計物件之間 的靜態結構,如何完成物件之間的繼承、實 現與依賴關係,這關乎著系統設計出來是否健壯(robust):像是易懂、易維護、易修改、耦合度低等等議題。Structural 模式正如其名,其分類下的模式給出了在不同場合下所適用的各種物件關係結構。

  • Behavioral 模式
物件之間的合作行 為構成了程式最終的行為,物件之間若有設 計良好的行為互動,不僅使得程式執行時更有效率,更可以讓物件的職責更為清晰、整個程式的動態結構(像是物件調度)更有彈性。

多執行緒模式
在很多應用中都會使用多執行緒,尤其是在Web應用中,多執行緒以 Gof 整理的模式為基礎,考量多執行緒環境中,如何組合這些基本模式來完成多執行緒安全要求。


參考資料
以下是以Java實作設計模式的介紹網站,從下面的連結開始,當中您可以找到更多設計模式的資源。

使用者入門 (Visual C++ 中的 [如何?])

使用 Visual C++
逐步解說:使用 Visual Studio IDE

介紹 Visual Studio 整合式開發環境 (IDE),並示範適用於 Visual C++ 開發人員的有用功能。

HOW TO:編譯針對 Visual Studio 中 CLR 的 C++ 程式

示範如何使用 Visual Studio IDE 編譯 Visual C++ 程式。

HOW TO:編譯說明主題的程式碼範例

示範如何編譯 Visual Studio 隨附的說明主題中的程式碼範例。

HOW TO:從命令列編譯原生 C++ 程式

示範如何從命令列編譯 Visual C++ 程式。

HOW TO:搭配 Microsoft Platform SDK 使用 Visual C++ Express 版

提供安裝 Microsoft Platform SDK 以搭配使用 Visual C++ Express Edition 的指示。

針對 UNIX 使用者的 Visual C++ 簡介

向 Microsoft 環境的新手開發人員介紹 Visual Studio 和 Visual C++。

HOW TO:從現有程式碼建立 C++ 專案

示範如何將現有的程式碼匯入至 Visual Studio。

HOW TO:建立 Windows Form 應用程式

解說如何使用 Visual Studio 建立 Windows Form 應用程式。

逐步解說:建立 Windows Form 控制項

解說如何使用 Visual Studio 建立 Windows Form 控制項,以及如何在應用程式中使用該控制項。

ASP.NET Web 服務範本 (C++)

介紹用來編寫 XML Web Service 的 ASP.NET Web 服務範本。

建立和開發 Managed 裝置專案

討論針對 Managed 裝置和針對桌上型電腦進行開發的一些差異性。

HOW TO:建立 SQL Server 專案 (C++)

提供 SQL Server 類別庫範本的概觀。

CLR 主控台應用程式範本 (C++)

介紹主控台應用程式範本,它可用來建立會從命令列執行的應用程式。

逐步解說:建立和使用 Managed 組件

示範如何建立 Managed 組件,以及如何從另一個應用程式來使用該組件。

HOW TO:建立 Standard C++ 程式

解說如何使用 Visual Studio 建立及編譯標準的 C++ 程式。

MFC 應用程式精靈

解說如何使用 MFC 應用程式精靈建立 MFC 應用程式。

MFC ActiveX 控制項精靈

解說如何使用 MFC ActiveX 控制項精靈建立 MFC ActiveX 控制項。

Win32 應用程式精靈

解說如何使用 Win32 應用程式精靈建立標準的 C++ 程式。

MFC DLL 精靈

解說如何使用 MFC DLL 精靈建立 MFC 動態連結程式庫。

ATL 專案精靈

解說如何使用 ATL 專案精靈建立 Active Template Library 應用程式。

ATL Server 專案精靈

解說如何使用 ATL Server 專案精靈建立原生 XML Web Service 應用程式。

Windows 服務範本 (C++)

解說如何使用 Windows 服務範本建立 Windows 服務,Windows 服務是一種會在它自己的 Windows 工作階段中長時間執行的可執行應用程式。

建立及移植 Visual C++ 裝置專案

包含有關建立新 Visual C++ 裝置專案的主題,以及有關可讓現有專案在 Visual Studio 2005 環境中鎖定裝置的主題。

逐步解說:建立和使用動態連結程式庫

示範如何建立動態連結程式庫,以及如何從另一個應用程式來使用該 DLL。

C++ 語言 (Visual C++ 中的 [如何?])

介紹用來鎖定 Common Language Runtime (CLR) 為目標的 C++ 新語法。

HOW TO:讀取二進位檔案

示範如何從檔案讀取二進位資料。

HOW TO:寫入二進位檔案

示範如何將二進位資料寫入檔案中。

HOW TO:讀取文字檔

示範如何開啟文字檔,並一次讀取一行。

HOW TO:寫入文字檔

示範如何使用 StreamWriter 類別建立文字檔,並將文字寫入到這個檔案中。

HOW TO:列舉目錄中的檔案

示範如何擷取目錄中的檔案之清單。

HOW TO:監視檔案系統變更

使用 FileSystemWatcher 來註冊建立、變更、刪除或重新命名檔案的對應事件。

HOW TO:擷取檔案資訊

示範 FileInfo 類別。當您知道檔案名稱時,您可以使用這個類別擷取檔案的資訊,例如檔案大小、目錄、完整名稱以及建立和上次修改的日期和時間。

HOW TO:將資料寫入至 Windows 登錄

使用 CurrentUser 機碼來建立 RegistryKey 類別的可寫入執行個體。

HOW TO:從 Windows 登錄讀取資料

使用 CurrentUser 機碼來從 Windows 登錄讀取資料。

HOW TO:從剪貼簿擷取文字

使用 GetDataObject 成員函式來傳回 IDataObject 介面的指標,然後即可對此介面查詢資料的格式,並用來擷取實際的資料。

HOW TO:將文字儲存在剪貼簿中

使用 System.Windows.Forms 命名空間中所定義的 Clipboard 物件來儲存字串。

HOW TO:擷取 Windows 版本

示範如何擷取目前作業系統的平台和版本的資訊。

HOW TO:擷取自啟動後經過的時間

示範如何判斷 Windows 啟動之後所經歷的時間滴答計數或是毫秒數。