Olá a todos, Necessito de implementar o metodo C# abaixo em progress 4GL SHA1Managed sha = new SHA1Managed(); .... RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); byte[] SignedHashValue = rsa.SignData(digest, sha); Console.WriteLine(Convert.ToBase64String(SignedHashValue)); Em progress consigo ter o digest igual ao C#: DEFINE VARIABLE tmp AS RAW NO-UNDO. DEFINE VARIABLE digest AS LONGCHAR NO-UNDO. DEFINE VARIABLE cKeyPrivate AS LONGCHAR NO-UNDO. ASSIGN cKeyPrivate = 'myKeyPrivate'. tmp = SHA1-DIGEST("my test to encrypt"). digest = BASE64-ENCODE(tmp). /*digest: pFyzYxHg+l1Ib0Vivv33QnYRK90= */ MESSAGE string(digest) VIEW-AS ALERT-BOX INFO BUTTONS OK. Agora como faço o RSACryptoServiceProvider, que é esta instrução. byte[] SignedHashValue = rsa.SignData(digest, sha); Console.WriteLine(Convert.ToBase64String(SignedHashValue)); Grato pela atenção.
Não sei se você consegue isso direto na linguagem. O Progress tem algumas funções prontas p/ criptografia (ENCRYPT e DECRYPT), mas hash com assinatura não conheço. O que você pode tentar é chamar a Cryptographic API diretamente. Muito trabalho na minha opinião, mas é possível. Você não pode criar um componente em C# e chamá-lo pelo Progress mesmo? Ou então em C++ ou em qualquer linguagem. Até um webservice acho que passaria...
Olá Marcos, antes de mais obrigado pela sua resposta. Já fiz o código em ABL em versão 10.2B, e consegui devolver assintura correcta. Agora estou com a seguinte problema, ao invocar a classe noutro computador que somente tem o OEStudio 10.1B esta a dar este erro... System.Security.Cryptography. is not a valid package; The directory does not exist relative to PROPATH (13643) ** C:\teste\chave.cls Could not understand line 13. (196) O pc tem a framework até a 3.0. Pode me explicar o processo de configuar o Progress para ler as librarias.