TIP: Get jars based on your java installation
- Apache log4j
- http://logging.apache.org/log4j/1.2/download.html
- log4j-1.2.16
- Bouncy castle Crypto APIs
- http://www.bouncycastle.org/latest_releases.html
- bcprov-jdk15-146
package com.as400samplecode; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.security.Security; import org.bouncycastle.crypto.AsymmetricBlockCipher; import org.bouncycastle.crypto.engines.RSAEngine; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.util.PrivateKeyFactory; import sun.misc.BASE64Decoder; public class RSADecryptFile { public static void main(String[] args) { String privateKeyFilename = null; String encryptedFilename = null; String outputFilename = null; RSADecryptFile rsaDecryptFile = new RSADecryptFile(); if (args.length < 3) { System.err.println("Usage: java "+ rsaDecryptFile.getClass().getName()+ " Private_Key_Filename Encrypted_Filename Output_Filename"); System.exit(1); } privateKeyFilename = args[0].trim(); encryptedFilename = args[1].trim(); outputFilename = args[2].trim(); rsaDecryptFile.decrypt(privateKeyFilename, encryptedFilename, outputFilename); } private void decrypt (String privateKeyFilename, String encryptedFilename, String outputFilename){ try { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); String value = ""; String key = readFileAsString(privateKeyFilename); BASE64Decoder b64 = new BASE64Decoder(); AsymmetricKeyParameter privateKey = (AsymmetricKeyParameter) PrivateKeyFactory.createKey(b64.decodeBuffer(key)); AsymmetricBlockCipher e = new RSAEngine(); e = new org.bouncycastle.crypto.encodings.PKCS1Encoding(e); e.init(false, privateKey); String inputdata = readFileAsString(encryptedFilename); byte[] messageBytes = hexStringToByteArray(inputdata); int i = 0; int len = e.getInputBlockSize(); while (i < messageBytes.length) { if (i + len > messageBytes.length) len = messageBytes.length - i; byte[] hexEncodedCipher = e.processBlock(messageBytes, i, len); value = value + new String(hexEncodedCipher); i += e.getInputBlockSize(); } System.out.println(value); BufferedWriter out = new BufferedWriter(new FileWriter(outputFilename)); out.write(value); out.close(); } catch (Exception e) { System.out.println(e); } } public static String getHexString(byte[] b) throws Exception { String result = ""; for (int i=0; i < b.length; i++) { result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 ); } return result; } public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } private static String readFileAsString(String filePath) throws java.io.IOException{ StringBuffer fileData = new StringBuffer(1000); BufferedReader reader = new BufferedReader( new FileReader(filePath)); char[] buf = new char[1024]; int numRead=0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; } reader.close(); System.out.println(fileData.toString()); return fileData.toString(); } }
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.