String token = "xxxxqaz2WSX";
String aseKey = "xxxxxxxxx";
DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(token, aseKey, "xxxxxxxx");
String encryptMsg = json.getString("encrypt");
String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp, nonce, encryptMsg);
JSONObject callbackMsgJson = JSONObject.parseObject(plainText);
String random = callbackMsgJson.getString("Random");
String responseEncryMsg = random;
Map<String, String> encryptedMap = dingTalkEncryptor.getEncryptedMap(responseEncryMsg, System.currentTimeMillis(), com.dingtalk.oapi.lib.aes.Utils.getRandomStr(8));
return encryptedMap;
红色字体一行,值为空,报错/**加密明文文本非法**/ ,不知道怎么回事,求助,谢谢~~~~~!!!!!!!!!!!!!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的代码片段,问题出在尝试使用一个空的字符串(即responseEncryMsg = random;
这一行得到的random
值)进行加密,而这个值应该是用于构建回复消息的明文内容。错误提示“加密明文文本非法”表明加密方法期望一个有效的、非空的明文字符串。
首先,请确保从callbackMsgJson.getString("Random")
获取到的random
变量确实包含了预期的数据。如果Random
字段在接收到的消息中是空的或者没有按预期赋值,那么直接将其用作加密的明文就会导致错误。
检查数据源:确认回调消息JSON中的Random
字段是否总是有值。可以通过打印callbackMsgJson.toJSONString()
来查看整个回调消息的内容,以验证Random
字段是否被正确填充。
处理空值情况:在进行加密之前,增加对random
变量的检查,确保它不为空。如果该字段可能为空且没有合适的替代内容,可以考虑提供一个默认值或生成一个合适的响应内容。
修改代码示例如下:
String random = callbackMsgJson.getString("Random");
// 检查random是否为空
if (StringUtils.isEmpty(random)) {
// 如果random为空,这里可以根据实际情况处理,比如设置一个默认值或者抛出异常等
random = "DEFAULT_RANDOM_VALUE"; // 示例:设置一个默认值
}
String responseEncryMsg = random;
日志记录:为了更好地调试和理解问题,可以在关键步骤添加日志输出,特别是变量赋值前后,这样可以帮助快速定位问题所在。
审查API文档:再次检查钉钉相关API文档,确认Random
字段的用途以及返回空值的可能原因,确保你的处理逻辑符合API的设计意图。
通过上述步骤,你应该能够识别并解决导致加密失败的具体原因。如果问题依然存在,可能需要更详细地检查与钉钉接口交互的其他部分,或者联系钉钉技术支持获取帮助。