java安全1

        Java安全的内容很多,这里主要是讲安全的java应用,即安全的应用程序,不多涉及java的安全机制以及网络安全机制,对于加密解密算法也是不会去了解算法本身,只是了解java的api及应用。

一、对称密钥的生成及以对象序列化方式保存

1、获取密钥生成器

KeyGenerator kg = KeyGenerator.getInstance("DESede");

指定加密算法的名称可以是:Blowfish(448位)、DES、DESede、HmacMD5、HmacSHA1、AES等

2、初始化密钥生成器

kg.init(168);

使用DESede可以是112、168位,DES56位、Blowfish32-448位之间可以被8整除的数,AES可以是128、192、256位

3、生成密钥

SecretKey  k = kg.generateKey();

SecretKey 密钥的类型,用于以后的加密解密,此类可以序列化为文本保存罗

4、序列化保存在文件中

FileOutputStream f = new FileOutputStream("key1.dat");

ObjectOutputStream b = new ObjectOutputStream(f);

b.writeObject(k);

ObjectOutputStream类的writeObject方法可以将对象序列化,以上程序将以流的形式传送k到文件key1.dat

5、读取密钥

FileInputStream f= new FileInputStream("key1.dat");

ObjectInputStream b= new ObjectInputStream(f);

Key k =(Key)b.readObject();

6、以字节保存对称密钥

byte[] kb= k.getEncoded();

FileOutputStream f = new FileOutputStream(keykb1.dat);

f.write(kb); 保存字节数组到文件keykb1.dat

for(int i=0;i<kb.length;i++){

      System.out.print(kb[i]+",")

}

我们看看输出11,-105,-119,50,4,-105,16,38...

如果我们打开keykb1.dat看到的是乱码,因为.dat是一个二进制文件,存放的是人意的二进制数。

二、使用对称密钥进行加密和解密

1、从文件中获取密码

2、创建密码器(Cipher对象)

Cipher cp = Cipher.getInstance("DESede");  密码是什么算法的,就要什么算法的名称

3、初始化密码器

cp.init(Cipher.ENCRYPT_MODE,k);

第一个参数说明是加密还是解密,此处加密。第二个参数就是密钥。

4、获取等待加密的明文

String s = "hello world";

byte ptext[] = s.getBytes("UTF8");

加密器(Cipher对象)的操作是针对字节数组的,所以s.getBytes转化字符为数组

5、加密

byte ctext = cp.doFinal(ptext);

6、处理加密结果

如保存结果到文件

FileOutputStream f = new FileOutputStream("SEnc.dat");

f.write(ctext);

这个文件就是一个加密的,在网络上被黑了,但是别人看不懂,除非知道密码解密,

7、解密

获取密文——获取密钥——解密

获取密文

FileInputStream f = new FileInputStream("SEnc.dat");

int num = f.available();

byte[] ctext = new byte[num];

f.read(ctext);

获取密钥

FileInputStream f 1= new FileInputStream("keykb1.dat");

int num2 = f1.available();

byte[] keykb = new byte[num2];

f.read(keykb);

SecretKeySpec k = new SecretKeySpec(keykb,"DESede");

解密:获取密码器并初始化, 然后解密

Cipher cp = Cipher.getInstance("DESede");

cp.init(Cipher.DECRYPT_MODE,k);

byte[] ptext =cp.doFinal(ctext);

String s = new String(ptext,"UTF8");

 三、基于口令的加密和加密

 

 

 

你可能感兴趣的:(java,职场,休闲)