[英]Hashing using md5 and sign using private certificate
我有一個要求,我必須生成一個URL,其中參數之一是簽名,並且必須使用Java應用程序中的以下要求來生成簽名:
應該使用MD5對其他4個URL參數值進行哈希處理(按以下指定的順序),並使用專用證書進行簽名。 (簽名將是RSA實驗室的公鑰密碼學標准注釋#1中定義的DER編碼的PKCS#1塊。)結果摘要應使用base64轉換為ASCII字符集,然后進行編碼以符合HTTP URL字符集限制。
Order Parameter
1 [queryparameter1]
2.. [queryparameter …] *
3 Expiration
最終網址應類似於
https://<ServerName>:<Port>/imageRet/pod?ID=123456789&build=XHB&date=201102151326&expiration=20110218155523&signature=H767dhghjKJ#23mxi
我之前從未從事密碼學方面的工作,因此不知道如何開始。 有人可以幫助實現這一目標。
這將是簽名代碼
Signature sig = Signature.getInstance("MD5withRSA");
sig.initSign(privateKey);
sig.update(canonicalize(params));
byte signature[] = sig.sign();
String signatureB64UrlEncoded = Base64.getUrlEncoder().encodeToString(signature);
canonicalize(params)
意味着將url的String
參數轉換為服務指定的byte[]
。 您尚未提供詳細信息。 這一步並不容易,因為等效的URL可能生成不同的簽名。
例如
q=hello%20world --> Qazz_tVB-guYai5oW0Eef6BbVP ...
q=hello world --> JJWDEPMQDmffcsjR0dP3vnrkFT ...
一個示例實現,但肯定無效...
//Convert params[] to byte[] converting each String to byte with default charset and concatenating results
public byte[] canonicalize(String params[] ) throws IOException{
final ByteArrayOutputStream out = new ByteArrayOutputStream();
for (String param: params){
out.write(param.getBytes());
}
return out.toByteArray();
}
查看Amazon AWS,以了解如何規范化URL的示例
如果您最終決定使用更安全的算法,只需將MD5withRSA
替換為例如SHA256withRSA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.