簽名驗籤以及RSA與AES的區別

2021-08-21 05:52:10 字數 2688 閱讀 7314

"1.0"

encoding=

"gbk"

?>

100001022

0test

test

2009041611084101

00600

0010530001

2009041612000022

* 報文簽名

* @param msg:原始xml資料

*/public string signmsg

(string xml)

throws exception

public

static string signmsg

(string strdata, string pathpfx, string pass)

throws exception

private

static string signmsg

(string strdata, string pathpfx, string pass,provider prv)

throws exception

string signedmsg = signplain(strmsg, pathpfx, pass,prv);

string resp=xmltools.send(url,xml);

boolean flag=

this.verifymsg(resp, tranxcontants.tltcerpath,isfront);

int istart = strxml.indexof(

"");

if(istart==-

1) throw

new exception(

"xml報文中不存在");

int end = strxml.indexof(

"");

if(end==-

1) throw

new exception(

"xml報文中不存在");

string signedmsg = strxml.substring(istart +

12, end);

string strmsg = strxml.substring(

0, istart) + strxml.substring(end +

13);

system.out.println(strmsg);

system.out.println(strmsg.length());

system.out.println(signedmsg.tolowercase());

return crypt.verifymsg(signedmsg.tolowercase(), strmsg,cerfile);

rsa非對稱加密,公鑰加密,私鑰解密,反之亦然。由於需要大數的乘冪求模等演算法,執行速度慢,不易於硬體實現。

通常私鑰長度有512bit,1024bit,2048bit,4096bit,長度越長,越安全,但是生成金鑰越慢,加解密也越耗時。

既然是加密,那肯定是不希望別人知道我的訊息,所以只有我才能解密,所以可得出公鑰負責加密,私鑰負責解密;

同理,既然是簽名,那肯定是不希望有人冒充我發訊息,只有我才能發布這個簽名,所以可得出私鑰負責簽名,公鑰負責驗證。

aes對稱加密,金鑰最長只有256個bit,執行速度快,易於硬體實現。由於是對稱加密,金鑰需要在傳輸前通訊雙方獲知。

基於以上特點,通常使用rsa來首先傳輸aes的金鑰給對方,然後再使用aes來進行加密通訊。

aes加密資料塊分組長度必須為128位元,金鑰長度可以是128位元、192位元、256位元中的任意乙個(如果資料塊及金鑰

長度不足時,會補齊)。aes加密有很多輪的重複和變換。大致步驟如下:

1、金鑰擴充套件(keyexpansion),

2、初始輪(initial round),

3、重複輪(rounds),每一輪又包括:subbytes、shiftrows、mixcolumns、addroundkey,

4、最終輪(final round),最終輪沒有mixcolumns

aes加密過程是在乙個4×4的位元組矩陣上運作,這個矩陣又稱為「狀態(state)」,其初值就是乙個明文區塊(矩陣中乙個元

素大小就是明文區塊中的乙個byte)。加密時,各輪aes加密迴圈(除最後一輪外)均包含4個步驟:

addroundkey (加輪秘鑰)— 矩陣中的每乙個位元組都與該次輪秘鑰(round key)做xor運算。

subbytes (位元組代換)— 通過非線性的替換函式,用查詢表的方式把每個位元組替換成對應的位元組。

shiftrows (行移位)— 將矩陣中的每個橫列進行迴圈式移位。

mixcolumns (列混淆)— 使用線性轉換來混合每列的四個位元組。

位元組代換

代換表(s盒)被設計成能夠抵擋所有已知的攻擊

例如,十六進製制對應的的行值是9,列值是5,s盒中此處的值是。因此被對映為

RSA簽名與驗籤

rsa演算法除了可以進行加解密以外,還可以用來簽名與驗籤。rsa用來進行簽名與驗簽時是使用私鑰進行簽名,公鑰進行驗籤的。這點與加解密的時候剛好相反。加解密時使用公鑰加密,私鑰解密。簽名和驗籤是通過signature物件進行的。以下是乙個使用signature進行簽名的示例。初始化signature時...

RSA簽名,驗籤的理解

假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰,來解密。這樣我就可以保護資料了...

RSA簽名,驗籤的理解

rsa簽名,驗籤的理解 原創學不死的程式設計師 最後發布於2019 03 24 17 41 37 閱讀數 376 收藏 展開一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加...