You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java进程通信场景下无法修改待加密密码值的技术求助

问题分析与修复方案

核心问题:进程通信协议不匹配

你的加密模块和调用进程之间的通信逻辑完全不对齐,导致选中的历史密码从未被加密模块正确接收为待加密密钥,所以始终用旧值执行加密操作。

具体问题点

  1. 加密模块的逻辑规则:只有当收到mode为PASSKEY时,才会读取下一个输入作为新的passkey;收到ENCRYPT指令时,直接使用当前已有的passkey加密。
  2. 调用进程的发送顺序错误:你直接发送选中的密码,再发送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();
}

验证逻辑

修复后通信流程:

  1. 调用进程发送PASSKEY → 加密模块接收后,读取下一行作为新密钥并更新
  2. 调用进程发送选中的密码 → 加密模块将其赋值给passkey
  3. 调用进程发送ENCRYPT → 加密模块使用刚更新的密钥执行加密,返回结果

这样就能确保每次加密都使用你选中的目标密码。

内容的提问来源于stack exchange,提问作者user17244850

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:20:37