【JAVA核心技术】加密之对称加密
来源:互联网 发布:什么是店宝宝软件 编辑:程序博客网 时间:2024/06/06 13:01
本示例采用AES(高级加密标准)对文件进行加密。要使用改程序先要生成密钥,
运行如下命令:java AESTest -genkey secret.key 这样密钥就被保存到secret.key文件中了。
现在可以用如下命令对文件进行加密:java AESTest -encrypt F:\javacode\a.html F:\javacode\x.html secret.key 。
这里首先是在secret.key获取密钥然后读取a.html把它加密的内容放到x.html。
如下命令进行解密:java AESTest -decrypt F:\javacode\x.html F:\javacode\b.html secret.key。
同样在secret.key获取密钥然后把加密后的x.html文件中的内容进行解密,把解密的内容放到b.html。
这样a.html中的内容就和b.html中内容相同了。
import java.io.*;import java.security.*;import javax.crypto.*;/** * This program tests the AES cipher. Usage:<br> * java AESTest -genkey keyfile<br> * java AESTest -encrypt plaintext encrypted keyfile<br> * java AESTest -decrypt encrypted decrypted keyfile<br> * @author Cay Horstmann * @version 1.0 2004-09-14 */public class AESTest{ public static void main(String[] args) { try { if (args[0].equals("-genkey")) { KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecureRandom random = new SecureRandom(); keygen.init(random); SecretKey key = keygen.generateKey(); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(args[1])); out.writeObject(key); out.close(); } else { int mode; if (args[0].equals("-encrypt")) mode = Cipher.ENCRYPT_MODE; else mode = Cipher.DECRYPT_MODE; ObjectInputStream keyIn = new ObjectInputStream(new FileInputStream(args[3])); Key key = (Key) keyIn.readObject(); keyIn.close(); InputStream in = new FileInputStream(args[1]); OutputStream out = new FileOutputStream(args[2]); Cipher cipher = Cipher.getInstance("AES"); cipher.init(mode, key); crypt(in, out, cipher); in.close(); out.close(); } } catch (IOException e) { e.printStackTrace(); } catch (GeneralSecurityException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * Uses a cipher to transform the bytes in an input stream and sends the transformed bytes to an * output stream. * @param in the input stream * @param out the output stream * @param cipher the cipher that transforms the bytes */ public static void crypt(InputStream in, OutputStream out, Cipher cipher) throws IOException, GeneralSecurityException { int blockSize = cipher.getBlockSize(); int outputSize = cipher.getOutputSize(blockSize); byte[] inBytes = new byte[blockSize]; byte[] outBytes = new byte[outputSize]; int inLength = 0; boolean more = true; while (more) { inLength = in.read(inBytes); if (inLength == blockSize) { int outLength = cipher.update(inBytes, 0, blockSize, outBytes); out.write(outBytes, 0, outLength); } else more = false; } if (inLength > 0) outBytes = cipher.doFinal(inBytes, 0, inLength); else outBytes = cipher.doFinal(); out.write(outBytes); }}
- 【JAVA核心技术】加密之对称加密
- Java加密/解密之对称加密
- JAVA加密解密之对称加密
- Java加密解密之对称加密
- Java加密解密之非对称加密
- java 加密之对称加密算法
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密与非对称加密
- Java安全之对称加密与非对称加密
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密与非对称加密
- Java安全之对称加密与非对称加密
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密与非对称加密
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- 对称加密之简单加密
- android PopupWindow
- 前序遍历二叉树非递归写法
- get post 本质区别
- Android中Fragment的应用
- kernel与用户程序批量传输数据的方法
- 【JAVA核心技术】加密之对称加密
- 26/7/2012 ICPC培训 第十一天
- HDOJ1228
- 【九度要诀】
- 快排的非递归写法
- Android init.rc
- linux 实时和抢占的学习日记
- MAC OS X JAVA开发环境配置简述 增加mysql安装简述 附myeclipse10 for mac 破解版下载
- 在android编程中出现cannot be resolved or is not a field