首页 > 解决方案 > 进度 4GL DECRYPT 失败

问题描述

我需要帮助。我使用 AES_CBC_256 为我们客户的数据加密 json 包,并为每个包使用不同的密钥。在生成的大约一百万个数据包中,前几十个不能被解密,返回“?” 后续数据包经过适当加密,可以正常解密。MEMPTR 扩展了数据大小 + 1024 字节。该包首先被加密,然后是 Base64 编码。我不使用 IV。下面的代码没有任何错误处理,以提高可读性。有什么建议么?

FUNCTION {&Modul}-encrypt RETURN CHAR(INPUT pInput AS LONGCHAR, INPUT pKey AS RAW, OUTPUT pOut AS LONGCHAR).
  DEF VAR mMemPtr AS MEMPTR NO-UNDO.
  FIX-CODEPAGE(pOut) = "UTF-8".
  
  SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = "AES_CBC_256".
  SECURITY-POLICY:SYMMETRIC-ENCRYPTION-KEY = pkey.
  
  SET-SIZE(mMemPtr) = LENGTH(pInput) + 1024.
  
  mMemPtr = ENCRYPT(pInput) NO-ERROR.
      
  pOut = BASE64-ENCODE(mMemPtr) NO-ERROR.
          
  RETURN "OK".
END.

FUNCTION {&Modul}-decrypt RETURN LONGCHAR(INPUT pInput AS LONGCHAR, INPUT pkey AS RAW).
  DEF VAR pOut AS LONGCHAR NO-UNDO.
  FIX-CODEPAGE(pOut) = "UTF-8".
  DEF VAR mMemPtrIn AS MEMPTR NO-UNDO.
  DEF VAR mMemPtrOut AS MEMPTR NO-UNDO.
  SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = "AES_CBC_256".
  SECURITY-POLICY:SYMMETRIC-ENCRYPTION-KEY = pkey.
  
  mMemPtrIn  = BASE64-DECODE(pInput) NO-ERROR.
  
  mMemPtrOut = DECRYPT(mMemPtrIn) NO-ERROR.
  
  COPY-LOB FROM mMemPtrOut TO pOut CONVERT SOURCE CODEPAGE "utf-8" NO-ERROR.
  
  SET-SIZE(mMemPtrIn) = 0.
  SET-SIZE(mMemPtrOut) = 0.
  RETURN pOut.
END.

标签: encryptionopenedgeprogress-4gl4gl

解决方案


推荐阅读