Java DES 加密/解密

lplo 9年前發布 | 1K 次閱讀 Java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec;

public class Main {

static Cipher ce;
static Cipher cd;

public static void main(String args[]) throws Exception {

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

    SecretKey skey = KeyGenerator.getInstance("DES").generateKey();

    byte[] initializationVector = new byte[]{0x10, 0x10, 0x01, 0x04, 0x01, 0x01, 0x01, 0x02};

    AlgorithmParameterSpec algParameters = new IvParameterSpec(initializationVector);
    ce = Cipher.getInstance("DES/CBC/PKCS5Padding");
    cd = Cipher.getInstance("DES/CBC/PKCS5Padding");

    ce.init(Cipher.ENCRYPT_MODE, skey, algParameters);
    cd.init(Cipher.DECRYPT_MODE, skey, algParameters);

    FileInputStream is = new FileInputStream("C:/Users/nikos7/Desktop/output.txt");
    FileOutputStream os = new FileOutputStream("C:/Users/nikos7/Desktop/output2.txt");
    int dataSize = is.available();

    byte[] inbytes = new byte[dataSize];
    is.read(inbytes);

    String str2 = new String(inbytes);
    System.out.println("Input file content\n" + str2 + "\n");

    write_encode(inbytes, os);

    os.flush();
    is.close();
    os.close();

    System.out.println("Ecrypted Content to output2.txt\n");

    is = new FileInputStream("C:/Users/nikos7/Desktop/output2.txt");

    byte[] decBytes = new byte[dataSize];

    read_decode(decBytes, is);

    is.close();

    String str = new String(decBytes);

    System.out.println("Decrypted file contents:\n" + str);

}

public static void write_encode(byte[] bytes, OutputStream output) throws Exception {
    CipherOutputStream cOutputStream = new CipherOutputStream(output, ce);
    cOutputStream.write(bytes, 0, bytes.length);
    cOutputStream.close();
}

public static void read_decode(byte[] bytes, InputStream input) throws Exception {
    CipherInputStream cInputStream = new CipherInputStream(input, cd);
    int position = 0, i;

    while ((i = cInputStream.read()) != -1) {
        bytes[position] = (byte) i;
        position++;
    }
}

}</pre>

 本文由用戶 lplo 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!