23.07.2013 Views

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Example 10.9. DigestDecryptor<br />

import java.io.*;<br />

import java.security.*;<br />

import java.security.spec.*;<br />

import javax.crypto.*;<br />

import javax.crypto.spec.*;<br />

public class DigestDecryptor {<br />

public static void main(String[] args) {<br />

if (args.length != 3) {<br />

System.err.println("Usage: java DigestDecryptor infile outfile<br />

password");<br />

return;<br />

}<br />

String infile = args[0];<br />

String outfile = args[1];<br />

String password = args[2];<br />

if (password.length() < 8 ) {<br />

System.err.println("Password must be at least eight characters<br />

long");<br />

}<br />

try {<br />

FileInputStream fin = new FileInputStream(infile);<br />

FileOutputStream fout = new FileOutputStream(outfile);<br />

<strong>Java</strong> I/O<br />

// Get the digest.<br />

FileInputStream digestIn = new FileInputStream(infile + ".digest");<br />

DataInputStream dataIn = new DataInputStream(digestIn);<br />

// SHA digests are always 20 bytes long .<br />

byte[] oldDigest = new byte[20];<br />

dataIn.readFully(oldDigest);<br />

dataIn.close();<br />

// Create a key.<br />

byte[] desKeyData = password.getBytes();<br />

DESKeySpec desKeySpec = new DESKeySpec(desKeyData);<br />

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");<br />

SecretKey desKey = keyFactory.generateSecret(desKeySpec);<br />

// Use Data Encryption Standard.<br />

Cipher des = Cipher.getInstance("DES/ECB/PKCS5Padding");<br />

des.init(Cipher.DECRYPT_MODE, desKey);<br />

CipherOutputStream cout = new CipherOutputStream(fout, des);<br />

// Use SHA digest algorithm.<br />

MessageDigest sha = MessageDigest.getInstance("SHA");<br />

DigestInputStream din = new DigestInputStream(fin, sha);<br />

byte[] input = new byte[64];<br />

while (true) {<br />

int bytesRead = din.read(input);<br />

if (bytesRead == -1) break;<br />

cout.write(input, 0, bytesRead);<br />

}<br />

230

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!