encryption - 进度 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.
解决方案
推荐阅读
- mitmproxy - 为 mitmproxy 设置 modify-body 选项时,是否可以使用捕获的组进行替换?
- expressiveannotations - 在使用 AssertThat 属性的 Expressive Annotations 中 - 如何在运行时修改错误消息或传入字符串值
- docker - 将文件从 docker 容器复制到本地主机
- javascript - 如何用容器包装 VictoryBar?
- regex - 搜索模式并将其替换为数据库中的正则表达式
- docker - 使用 docker compose 停止容器不起作用
- mysql - 'secure_file_priv' 的 MySQL 值
- java - GWT-RPC 反序列化:关于减号的工作方式
- sql - 在 XML XPATH POSTGRES 中获取带有子节点的订单节点
- amazon-web-services - presto - 获取最近一个星期六的日期