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条)

报告相同问题?

悬赏问题

  • ¥15 maccms影视模板 制作影视网站失败 求
  • ¥15 stm32按键设置闹钟数进退位不正常
  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来