Java进程通信场景下无法修改待加密密码值的技术求助
问题分析与修复方案
核心问题:进程通信协议不匹配
你的加密模块和调用进程之间的通信逻辑完全不对齐,导致选中的历史密码从未被加密模块正确接收为待加密密钥,所以始终用旧值执行加密操作。
具体问题点
- 加密模块的逻辑规则:只有当收到
mode为PASSKEY时,才会读取下一个输入作为新的passkey;收到ENCRYPT指令时,直接使用当前已有的passkey加密。 - 调用进程的发送顺序错误:你直接发送选中的密码,再发送
ENCRYPT,但加密模块此时正等待接收下一个mode,会把你发送的密码当作无效指令忽略,之后读取ENCRYPT作为mode时,用的还是之前的旧密钥。
修复步骤
1. 修正调用进程的发送逻辑
在发送选中的密码前,先发送PASSKEY指令,让加密模块明确接下来的内容是新密钥:
Y分支代码修改:
原代码:
toEncrypt.println(listykenz.get(index)); toEncrypt.flush(); toEncrypt.println("ENCRYPT"); toEncrypt.flush();
修改后:
// 先发送PASSKEY指令,告知加密模块要更新密钥 toEncrypt.println("PASSKEY"); toEncrypt.flush(); // 发送选中的历史密码 toEncrypt.println(listykenz.get(index)); toEncrypt.flush(); // 发送ENCRYPT指令执行加密 toEncrypt.println("ENCRYPT"); toEncrypt.flush();
N分支代码修改:
原代码:
toEncrypt.println(thisPasskey); toEncrypt.println("ENCRYPT"); toEncrypt.flush();
修改后:
toEncrypt.println("PASSKEY"); toEncrypt.flush(); toEncrypt.println(thisPasskey); toEncrypt.flush(); toEncrypt.println("ENCRYPT"); toEncrypt.flush();
2. 优化加密模块鲁棒性(可选)
添加无效指令的处理分支,避免静默忽略异常:
while(!mode.equals("QUIT")){ if(mode.equals("PASSKEY")){ passkey = s.next(); passkey = passkey.toUpperCase(); encryptedMsg = encrypt(passkey); } else if(mode.equals("ENCRYPT")){ System.out.println(encrypt(passkey) + " is the password encrypted"); } else if(mode.equals("DECRYPT")){ System.out.println(decrypt(encryptedMsg) + " is the password decrypted"); } else { System.err.println("Unknown command: " + mode); } mode = s.next(); }
验证逻辑
修复后通信流程:
- 调用进程发送
PASSKEY→ 加密模块接收后,读取下一行作为新密钥并更新 - 调用进程发送选中的密码 → 加密模块将其赋值给
passkey - 调用进程发送
ENCRYPT→ 加密模块使用刚更新的密钥执行加密,返回结果
这样就能确保每次加密都使用你选中的目标密码。
内容的提问来源于stack exchange,提问作者user17244850
相关产品推荐
相关产品推荐

