进度 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.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)