天天看點

ABAP RSA 加密

最近出現一些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)。

ABAP RSA 加密
ABAP RSA 加密

key

現在有了key和類Z04_BIGINTX,我們可以寫程式了。

在下面的程式中,我們用公鑰加密,用私鑰簽署"Thirty-two bytes secret message!"這個資訊。結果顯示在螢幕上。它們被儲存在生成密鑰的相同檔案夾中。

簽名通常包括對消息進行散列(hash),并對散列值進行簽名,但是因為我們的消息足夠小,我們跳過散列步驟,直接對消息本身進行簽名。作為概念證明,這樣做應該是足夠的。

實際的工作隻是幾行代碼而已。

加密:

簽名:

剩下的就是将十六進制轉換為十進制,然後再轉換回來。

 輸出如下,

ABAP RSA 加密

 我們看到用公鑰指數加密,幾乎總是65537,需要約0.2秒,而用私鑰指數簽名需要30秒。

現在讓我們用openssl檢查一下結果。

解密,

ABAP RSA 加密
ABAP RSA 加密

Decrypt

添加raw參數,讓openssl顯示完整消息,

ABAP RSA 加密
ABAP RSA 加密

View Code

驗證,

ABAP RSA 加密
ABAP RSA 加密

Verify

所有RSA的東西都可以用函數組SSFW - SSF Function for Web Services Security輕松完成。除了你可以用openssl中的(-raw)開關得到的東西外,其他的都可以。例如,如果你想使用非标準的padding,這應該是很少見的情況。

為了友善,我将從例1中使用的密鑰建立一個PSE并使用該PSE。

在生産中,你可以考慮通過SSFA、STRUST和SSF_GET_PARAMETER來進行。

建立PSE,

ABAP程式,

運作後,

ABAP RSA 加密
ABAP RSA 加密
ABAP RSA 加密
ABAP RSA 加密
ABAP RSA 加密

這裡我們看到消息的SHA散列值被簽名了。

在這裡我們學習了如何在ABAP中使用2種不同的方法對短資訊進行RSA加密/簽名。

    1,純粹的ABAP實作。它在性能(和安全性)上遠遠比不上CommonCryptoLib。它的意義在于,讓我們更好地了解什麼是RSA加密。

    2,CommonCryptoLib。這裡的例子是一個基本的例子。還有很多東西可以做。可能會在下一篇部落格中介紹。

繼續閱讀