數字簽名(又稱公鑰數字簽名)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用於簽名,另乙個用於驗證,但法條中的電子簽章與數字簽名,代表之意義並不相同,電子簽章用以辨識及確認電子檔案簽署人身份、資格及電子檔案真偽者。而數字簽名則是以數學演算法或其他方式運算對其加密,才形成電子簽章,意即使用數字簽名才創造出電子簽章。 ——————— 摘自維基百科
簽名的好處
簽名可以保證資料完整性、不可抵賴性、鑑權
簽名過程
傳送方a將需要傳送的資料通過自己的私鑰(private key)進行簽名產生摘要,然後將簽名生成的摘要和需要傳送的資料一起傳輸給接收方b,接收方b在接收到資料後通過a的公鑰(public key)來對簽名進行校驗。
rsa簽名演算法演算法
金鑰長度
預設長度
簽名長度
實現方md2withrsa
512~65536(64的整數倍)
1024
與金鑰長度相同
jdkmd5withrsa
sha1withrsa
sha224withrsa
2048
bcsha256withrsa
sha384withrsa
sha512withrsa
ripemd128withrsa
ripemd168withrsa
**實現:
public
class
signaturewithrsa
/*** 獲取公鑰
* */
public
static rsapublickey getpublickey(mapkeymap)
/*** 獲取私鑰
* */
public
static rsaprivatekey getprivatekey(mapkeymap)
/*** 使用私鑰對資料進行簽名
*@throws exception
*@return byte
* */
public
static
byte signaturewithprivatekey(string data, rsaprivatekey rsaprivatekey) throws exception
/*** 使用公鑰對簽名的資料進行校驗
*@throws exception
* */
public
static
boolean
verifywithpublickey(string data, byte signed, rsapublickey rsapublickey) throws exception
public
static
void
main(string args) throws exception
}
輸出的結果:
以上,就是對rsa簽名演算法的簡單介紹,如有錯誤請指出,謝謝!
RSA數字簽名演算法
數字簽名無非就兩個目的 證明這訊息是你發的 證明這訊息內容確實是完整的 也就是沒有經過任何形式的篡改 包括替換 缺少 新增 這種是兩個目的都達到了,還有一些只達到乙個目的 公鑰和私鑰都可以用來加密或解密 只要能保證用a加密,就用b解密就行。至於a是公鑰還是私鑰,其實可以根據不同的用途而定。例如說,如...
rsa數字簽名實現
使用openssl庫進行封裝實現,如下 static int base64 decode char str,int str len,char decode,int decode buffer len static int base64 encode char str,int str len,char...
數字簽名演算法
gost3411,keccak,md2,md4,md5,sha1,ripemd128,ripemd160,ripemd256,ripemd320,sha224,sha256,sha384,sha512,sha3,skein,sm3,tiger,whirlpool rsa演算法實現參見另一篇文章 md...