數字簽名(又稱公鑰數字簽名、電子簽章等)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用於簽名,另乙個用於驗證。
數字簽名,就是只有資訊的傳送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對資訊的傳送者傳送資訊真實性的乙個有效證明。
數字簽名是非對稱金鑰加密技術與數字摘要技術的應用。
public class wxpayutil
}try catch (exception ex)
return data;
} catch (exception ex) . xml content: {}", ex.getmessage(), strxml);
throw ex;}}
/*** 將map轉換為xml格式的字串
** @param data map型別資料
* @return xml格式的字串
* @throws exception
*/public static string maptoxml(mapdata) throws exception
value = value.trim();
org.w3c.dom.element filed = document.createelement(key);
}transforme***ctory tf = transforme***ctory.newinstance();
transformer transformer = tf.newtransformer();
domsource source = new domsource(document);
transformer.setoutputproperty(outputkeys.encoding, "utf-8");
transformer.setoutputproperty(outputkeys.indent, "yes");
stringwriter writer = new stringwriter();
streamresult result = new streamresult(writer);
transformer.transform(source, result);
string output = writer.getbuffer().tostring(); //.replaceall("\n|\r", "");
try
catch (exception ex)
return output;
}/**
* 生成帶有 sign 的 xml 格式字串
** @param data map型別資料
* @param key api金鑰
* @return 含有sign欄位的xml
*/public static string generatesignedxml(final mapdata, string key) throws exception
/*** 生成帶有 sign 的 xml 格式字串
** @param data map型別資料
* @param key api金鑰
* @param signtype 簽名型別
* @return 含有sign欄位的xml
*/public static string generatesignedxml(final mapdata, string key, signtype signtype) throws exception
/*** 判斷簽名是否正確
** @param xmlstr xml格式資料
* @param key api金鑰
* @return 簽名是否正確
* @throws exception
*/public static boolean issignaturevalid(string xmlstr, string key) throws exception
string sign = data.get(field_sign);
return generatesignature(data, key).equals(sign);
}/**
* 判斷簽名是否正確,必須包含sign欄位,否則返回false。使用md5簽名。
** @param data map型別資料
* @param key api金鑰
* @return 簽名是否正確
* @throws exception
*/public static boolean issignaturevalid(mapdata, string key) throws exception
/*** 判斷簽名是否正確,必須包含sign欄位,否則返回false。
** @param data map型別資料
* @param key api金鑰
* @param signtype 簽名方式
* @return 簽名是否正確
* @throws exception
*/public static boolean issignaturevalid(mapdata, string key, signtype signtype) throws exception
string sign = data.get(field_sign);
return generatesignature(data, key, signtype).equals(sign);
}/**
* 生成簽名
** @param data 待簽名資料
* @param key api金鑰
* @return 簽名
*/public static string generatesignature(final mapdata, string key) throws exception
/*** 生成簽名. 注意,若含有sign_type欄位,必須和signtype引數保持一致。
** @param data 待簽名資料
* @param key api金鑰
* @param signtype 簽名方式
* @return 簽名
*/public static string generatesignature(final mapdata, string key, signtype signtype) throws exception
if (data.get(k).trim().length() > 0) // 引數值為空,則不參與簽名
}if (signtype.md5.equals(signtype))
else if (signtype.hmacsha256.equals(signtype))
else
}/**
* 獲取隨機字串 nonce str
** @return string 隨機字串
*/public static string generatenoncestr()
return new string(noncechars);
}/**
* 生成 md5
** @param data 待處理資料
* @return md5結果
*/public static string md5(string data) throws exception
return sb.tostring().touppercase();
}/**
* 生成 hmacsha256
* @param data 待處理資料
* @param key 金鑰
* @return 加密結果
* @throws exception
*/public static string hmacsha256(string data, string key) throws exception
return sb.tostring().touppercase();
}/**
* 日誌
* @return
*/public static logger getlogger()
/*** 獲取當前時間戳,單位秒
* @return
*/public static long getcurrenttimestamp()
/*** 獲取當前時間戳,單位毫秒
* @return
*/public static long getcurrenttimestampms()
}
數字簽名和驗籤
數字簽名使用了公鑰加密領域的技術 通常定義兩種互補的運算,乙個用於簽名,另乙個用於驗證。數字簽名是只有資訊的傳送者才能產生的別人無法偽造的一段數字串,這段數字串標明這段資訊是傳送者傳送的。數字簽名是非對稱金鑰加密技術與數字摘要技術的應用。數字簽名的作用 保證資訊傳輸的完整性 數字摘要 確認傳送者的身...
基於Rsa sha256的數字簽名與驗籤
移動mv openssl 1.1.0l.tar.gz usr local 解壓tar xzvf openssl 1.1.0l.tar.gz 進入解壓目錄 cd usr local openssl 1.1.0l 輸入命令 config make make install 檢視版本,出現版本資訊就說明安...
RSA簽名與驗籤
rsa演算法除了可以進行加解密以外,還可以用來簽名與驗籤。rsa用來進行簽名與驗簽時是使用私鑰進行簽名,公鑰進行驗籤的。這點與加解密的時候剛好相反。加解密時使用公鑰加密,私鑰解密。簽名和驗籤是通過signature物件進行的。以下是乙個使用signature進行簽名的示例。初始化signature時...