wgf42422 2009-12-01 19:05
浏览 202
已采纳

字符串加密后显示不出来.麻烦给找找错误.

直接上代码了.
[code="java"]import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Main extends JFrame {
JTextField text1, text2, text3;
JButton btn1, btn2;
String key = "fantistic";

Main() {
    //Initialize
    super("Encrypt");
    this.setSize(450, 490);
    this.setLayout(new GridLayout());

    text1 = new JTextField(16);
    text2 = new JTextField();
    text3 = new JTextField();
    text3.setEditable(false);
    btn1 = new JButton("Encrypt");
    btn2 = new JButton("Decrypt");

    //Layout
    Box baseBox, boxV1, boxV2;
    boxV1 = Box.createVerticalBox();
    boxV1.add(btn1);
    boxV1.add(Box.createVerticalStrut(8));
    boxV1.add(btn2);
    boxV1.add(Box.createVerticalStrut(16));
    boxV2 = Box.createVerticalBox();
    boxV2.add(Box.createVerticalStrut(4));
    boxV2.add(text1);
    boxV2.add(Box.createVerticalStrut(8));
    boxV2.add(text2);
    boxV2.add(Box.createVerticalStrut(8));
    boxV2.add(text3);
    baseBox = Box.createHorizontalBox();
    baseBox.add(boxV1);
    baseBox.add(Box.createHorizontalStrut(10));
    baseBox.add(boxV2);
    setLayout(new FlowLayout());
    add(baseBox);
    validate();
    setBounds(120, 125, 300, 150);
    setVisible(true);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    //Event
    btn1.addActionListener(new encrypt());
    btn2.addActionListener(new decrypt());

}

private class encrypt implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        String str = text1.getText();
        char[] chr = new char[str.length()];
        int len = chr.length;
        StringBuffer bstr = new StringBuffer(str);
        for (int i = 0; i < str.length(); i++) {
            int q = (key.charAt(i % key.length()) >> (i % 32)) | (key.charAt(i % key.length()) << (32 - (i % 32)));
            bstr.setCharAt(i, (char) (str.charAt(i) ^ q));
        }
        for (int i = 0; i < len; i++) {

            chr[i] = bstr.charAt(len - 1 - i);
        }
        text3.setText(String.valueOf(chr));
    }
}

private class decrypt implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        String str = text2.getText();
        char[] chr = new char[str.length()];
        int len = chr.length;
         StringBuffer bstr = new StringBuffer(str);
        for (int i = 0; i < str.length(); i++) {
            //左
            int q = (key.charAt(i % key.length()) << (i % 32)) | (key.charAt(i % key.length()) >> (32 - (i % 32)));
            bstr.setCharAt(i, (char) (str.charAt(i) ^ q));
        }
        for (int i = 0; i < len; i++) {
            chr[i] = bstr.charAt(len - 1 - i);
        }
        text3.setText(String.valueOf(chr));
    }
}

public static void main(String[] args) {
    new Main();
}

}[/code]
[b]问题补充:[/b]
To 1 yayg,
请多输入几个字符.
.解密不回来...而且貌似加密时丢失字符...
[b]问题补充:[/b]
To wocsok,
那个顺序确实是有问题...
还有key.charAt移位也有问题.char 2byte.16位...都改成16还是无法解密..
[b]问题补充:[/b]
已经解决了。。不能用int q
用char就对 了。。

  • 写回答

4条回答 默认 最新

  • yayg2008 2009-12-02 11:46
    关注

    经过调试,发现这样一个问题,
    将要解密的字符串反序后运行解密方法,第一个 数字 可以正常解密。
    解密时的q值分别为102,194,440.但加密时的q好像有点怪:102,-2147483600,-2147483621。
    不知道这是不是你知道的,说出来,希望对你有所帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?