最近出現一些SAP ABAP RSA加密的需求,這裡搬運一篇文章,用于學習參考。
本文連結:https://www.cnblogs.com/hhelibeb/p/14952732.html
原文标題:RSA Encryption in ABAP
最近我偶然在SAP社群發現了很多關于RSA加密的未解答的問題。在這裡我将嘗試提供一些例子,說明如何在ABAP中使用公鑰/私鑰加密。
所有的間接問題,如證書、信任、撤銷和密鑰生成,在本文中不會涉及。密鑰将用openssl生成。
RSA加密是非常簡單的。隻需要整數算術--主要是模幂運算。唯一的問題是,所涉及的整數比ABAP和大多數其他語言預設能處理的長。幸運的是,這個問題被Harry Boeck用Z04_BIGINTX類解決了,可以在這裡找到(出色的工作)。
備注:評論區提到另一個解決方案abapPGP。
建立一個工作目錄,并進入,
生成2048位RSA密鑰。
用純文字輸出公鑰和私鑰。我們隻需要模數(modulus)、公鑰指數(publicExponent)和私鑰指數(privateExponent)。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
key
現在有了key和類Z04_BIGINTX,我們可以寫程式了。
在下面的程式中,我們用公鑰加密,用私鑰簽署"Thirty-two bytes secret message!"這個資訊。結果顯示在螢幕上。它們被儲存在生成密鑰的相同檔案夾中。
簽名通常包括對消息進行散列(hash),并對散列值進行簽名,但是因為我們的消息足夠小,我們跳過散列步驟,直接對消息本身進行簽名。作為概念證明,這樣做應該是足夠的。
實際的工作隻是幾行代碼而已。
加密:
簽名:
剩下的就是将十六進制轉換為十進制,然後再轉換回來。
輸出如下,
我們看到用公鑰指數加密,幾乎總是65537,需要約0.2秒,而用私鑰指數簽名需要30秒。
現在讓我們用openssl檢查一下結果。
解密,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
Decrypt
添加raw參數,讓openssl顯示完整消息,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
View Code
驗證,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
Verify
所有RSA的東西都可以用函數組SSFW - SSF Function for Web Services Security輕松完成。除了你可以用openssl中的(-raw)開關得到的東西外,其他的都可以。例如,如果你想使用非标準的padding,這應該是很少見的情況。
為了友善,我将從例1中使用的密鑰建立一個PSE并使用該PSE。
在生産中,你可以考慮通過SSFA、STRUST和SSF_GET_PARAMETER來進行。
建立PSE,
ABAP程式,
運作後,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLrN2bsJEZlR3YhJHdu92Qvw1cy9GdhNWak5WSn5WaulGb0V3TvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
這裡我們看到消息的SHA散列值被簽名了。
在這裡我們學習了如何在ABAP中使用2種不同的方法對短資訊進行RSA加密/簽名。
1,純粹的ABAP實作。它在性能(和安全性)上遠遠比不上CommonCryptoLib。它的意義在于,讓我們更好地了解什麼是RSA加密。
2,CommonCryptoLib。這裡的例子是一個基本的例子。還有很多東西可以做。可能會在下一篇部落格中介紹。