`
嘻哈方式
  • 浏览: 0 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
密钥生成 密钥生成
public class SecurityKeyGenerator
{

    public static void main(String[] args)
        throws IOException, NoSuchAlgorithmException, ClassNotFoundException, NoSuchPaddingException,
        InvalidKeyException, IllegalBlockSizeException, BadPaddingException
    {
        // InputStream in = System.in;
        // InputStreamReader isr = new InputStreamReader(in);
        // BufferedReader br = new BufferedReader(isr);
        // String[] para = br.readLine().split(" ");
        // String s = para[0];// 明文
        // int key = Integer.parseInt(para[1]); // 移动位数

        // 创建对称密钥生成器
        KeyGenerator kg = KeyGenerator.getInstance("DESede");
        // 指定密钥长度
        kg.init(168);
        // 生成密钥,用于加密和解密
        SecretKey k = kg.generateKey();

        // 将密钥保存到文件中(以对象方式存储)
        FileOutputStream f = new FileOutputStream("key1.dat");
        ObjectOutputStream b = new ObjectOutputStream(f);
        b.writeObject(k);

        // 获取密钥编码格式(以字节方式存储)
        byte[] kb = k.getEncoded();
        // 将编码格式存入文件中
        FileOutputStream f2 = new FileOutputStream("keykb1.dat");
        f2.write(kb);

        System.out.println("密钥:");
        // 打印密钥编码中的内容
        for (int i = 0; i < kb.length; i++)
        {
            System.out.print(kb[i] + ",");
        }

        // /////////////////用密钥加密字符串
        // 得到密钥
        FileInputStream f22 = new FileInputStream("key1.dat");
        ObjectInputStream b2 = new ObjectInputStream(f22);
        Key k2 = (Key)b2.readObject();

        // 初始化密码器,使用DESede加密算法,密钥要是使用DESede计算出来的密钥
        Cipher cp = Cipher.getInstance("DESede");
        cp.init(Cipher.ENCRYPT_MODE, k2);
        // 将将要加密的明文转换成字节,进行加密
        String minwen = "Hello World!";
        byte ptext[] = minwen.getBytes("UTF8");
        byte ctext[] = cp.doFinal(ptext);
        System.out.println();
        System.out.println("密文:");
        for (int i = 0; i < ctext.length; i++)
        {
            System.out.print(ctext[i] + ",");
        }
        FileOutputStream fmiwen = new FileOutputStream("SEnc.dat");
        fmiwen.write(ctext);

        // // /////////////////用密钥解密刚才加密的字符串
        // 获取密文
        FileInputStream fin = new FileInputStream("SEnc.dat");
        int num = fin.available();
        byte[] ctextin = new byte[num];
        fin.read(ctextin);

        System.out.println();
        System.out.println("读取到的密文是:");
        for (int i = 0; i < ctextin.length; i++)
        {
            System.out.print(ctextin[i] + ",");
        }

        // 获取密钥
        FileInputStream f222 = new FileInputStream("keykb1.dat");
        int num2 = f222.available();
        byte[] keykb = new byte[num2];
        f222.read(keykb);
        SecretKeySpec kjiemi = new SecretKeySpec(keykb, "DESede");

        // 对密文进行解密
        Cipher cpjiemi = Cipher.getInstance("DESede");
        cpjiemi.init(Cipher.DECRYPT_MODE, kjiemi);
        byte[] ptextjiemi = cpjiemi.doFinal(ctextin);
        String jiemi = new String(ptextjiemi, "UTF-8");
        System.out.println();
        System.out.println("解密后明文:");
        System.out.println(jiemi);

    }

}


Global site tag (gtag.js) - Google Analytics