數位簽章主要有以下幾個步驟:第一、發方首先有一個公開金鑰/私密金鑰對,它將要簽名的報文作為一個單向散列函數的輸入,產生一個定長的散列碼,一般稱為訊息摘要。第二、使用發放的私密金鑰對散列碼進行加密產生簽名。將報文和簽名一同發出去。第三、收方用和發放一樣的散列函數對報文運算產生一個散列碼,同時用發放的公開金鑰對簽名進行解密。第四、如果收方計算得到的散列碼和解密的簽名一致,那麼說明的確是發方對報文進行了簽名而且報文在途中沒有被篡改。其具體過程1所示:如前所述,數位簽章主要分為兩個步驟:產生訊息摘要和數位簽章。使用單向散列函數的目的就是可以讓任意長度的訊息壓縮成為某一固定長度的訊息摘要。單向散列函數又稱之為單向Hash函數,它並不是加密函數,其基本模型為:h=F(M)其中M是輸入的訊息本文,可以為任意長度;F為單向散列演算法/函數;h為生產的訊息摘要,擁有固定的長度,它和M的長度無關。一個好的單向散列演算法F應該有以下5個特性:1、能處理任意長度的M(至少在實際應用中能碰到的任何長度);2、產生的訊息摘要h,要有不可預見性,h看起來和M沒有任何關係;3、給定M應該能很容易算出h;4、給定h不能計算出M,甚至不能得到關於M的任何資訊;5、給定任何一個M1,要想找到另一個M2,且M2不等於M1,要使F(M1)和F(M2)的結果一樣很難,在計算上要幾乎不可行.目前在密碼學上已經設計出了大量的單向散列演算法,比如RabinHash方案、MerkleHash方案,NHash演算法,MD2演算法,MD4演算法,MD5演算法和SHA等。實際中常用的單向散列演算法有訊息摘要演算法MD5(Message Digest5)和安全散列演算法SHA(Security Hash Algorithm). 如上所述,進行數位簽章至少應該進行以下2步:(1)發方用單向散列函數F對訊息本文M進行計算,產生散列碼h(2)發方用其用其私匙對散列碼進行h加密,把加密後的散列碼和訊息本文一起發送出來。驗證數位簽章至少需要以下2個步驟:(1)接方用單向散列函數F對接受到訊息本文M進行計算,產生散列碼h2(2)接方用發方的公開金鑰對接收到散列碼進行解密,還原得到散列碼h,比較散列碼h和散列碼h是否一致。如果一致就說明發方的確對該訊息進行了簽名,且訊息在途中沒有被竄改。關於在Java語言中,使用RSA演算法實現數位簽章請參考《用RSA實現數位簽章》。關於在Java語言中,使用DSA演算法實現數位簽章則請參考《用DSA演算法實現數位簽章》。關於java本身的數位簽章和數位憑證請參考《Java中的數位簽章和數位憑證》