重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
import java.awt.AWTException;
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、大邑县网站维护、网站推广。
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CharTest extends JFrame implements KeyListener {
JPanel pnlMain;
JTextField txtfile;
/**
* @param args
*/
public CharTest(){
pnlMain = new JPanel();
this.getContentPane().add(pnlMain);
txtfile = new JTextField(10);
pnlMain.add(txtfile);
txtfile.requestFocus();
txtfile.addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
System.out.println(""+e.getKeyCode());
}
public void keyTyped(KeyEvent e) {
System.out.println(""+e.getKeyCode());
}
public void keyReleased(KeyEvent e) {
System.out.println(""+e.getKeyCode());
}
public static void main(String[] args) {
try {
Robot robot = new Robot();
JFrame f = new CharTest();
f.setSize(200, 300);
f.setVisible(true);
robot.keyPress(KeyEvent.VK_SHIFT );
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_SHIFT );
} catch (AWTException e) {
// TODO Auto-generated catch block
System.out.println("here");
e.printStackTrace();
}
}
}
这段代码好像就是一段读取数据的代码。没有看出有加密的过程啊?
这段代码做的事情就是
1.读包长 passLength = in.read() ^ Server.SEED
2.从流in中读passLength长度的数据内容。
唯一一个特别的地方就是
passLength = in.read() ^ Server.SEED
也仅仅只能把长度读出来进行了一下异或。
写包的时候也同样进行一样异或就可以了。
没看明白你指的是什么key?加密的密钥向量吗?
如果是想用DES加密解密的话,可以使用下面的(加上注释后不让发,所以把注释去掉了,擦,还不让写“加密解密”这样的字)
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
public class DES {
private static final String ENCODING = "utf-8";
private byte[] key,iv;
private void setKeyIv(String key){
try {
this.key = key.getBytes(ENCODING);
//偏移量,可以与密钥相同
this.iv = new String("bing1987").getBytes(ENCODING);
}
catch (Exception e) {
e.printStackTrace();
}
}
//初始构造方法,设置默认密钥
public DES() {
setKeyIv("5a8f9e3l");
}
public DES(String key) {
setKeyIv(key);
}
public void main(String content) throws Exception {
System.out.println("加前:" + content);
String encrypt = encrypt(content);
System.out.println("加后:" + encrypt);
String decrypt = decrypt(encrypt);
System.out.println("解后:" + decrypt);
}
//加mi方法:instr 待加字串 return 加后的密文
public String encrypt(String instr) throws Exception{
byte[] bytes = desPublic(Cipher.ENCRYPT_MODE, instr.getBytes(ENCODING));
return Tools.encryptBASE64(bytes);
}
//解mi方法:encryptStr 待解字串 return 解后的字串
public String decrypt(String encryptStr) throws Exception {
byte[] bytes = desPublic(Cipher.DECRYPT_MODE, Tools.decryptBASE64(encryptStr));
return new String(bytes);
}
//mode 加或解表示值
//context 待加或解的字节数组
//return 加或解后的字节数组
private byte[] desPublic(int mode, byte[] context) throws Exception
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(this.key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(this.iv);
cipher.init(mode, secretKey, iv);
return cipher.doFinal(context);
}
}
上面用到的tools工具
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Tools {
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
}
你也可以把decryptBASE64和encryptBASE64方法合并到DES类里
容器中的key吗就是,key-value这两个东东在容器中,key就是你对象的一个命名,value就是对象本身。相当与字典一样从key找value。