此篇是將前篇產出的password.txt及private.key檔都複製移動到另一隻程式的資料夾,
再用新的程式去讀取它,並解出原本的密碼然後放在string中,
即可隨個人需求搭配其它程式碼去使用。
此部份使用了兩個class,
主要的class (blog123.java):
package blog123; public class blog123 { public static void main(String[] args) { // TODO Auto-generated method stub String pWord=null; try { pWord = getPass.readFileGetPass( "src\\" ); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("pWord = " + pWord); } }
另一個的class(getPass.java):
package blog123; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Paths; import java.security.KeyFactory; import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import javax.crypto.Cipher; public class getPass { public static String readFileGetPass(String path) throws Exception { // TODO Auto-generated method stub File passwordFile = new File (path); FileInputStream fileInputStream = new FileInputStream( path + "password.txt" ); DataInputStream dis = new DataInputStream(fileInputStream); // count the available bytes form the input stream int count = dis.available(); // create buffer byte[] bs = new byte[count]; // read data into buffer dis.read(bs); dis.close(); // 讀取金鑰 Load the keys KeyPair loadedKeyPair = loadKeyPair(path, "RSA"); // Load the keys from files byte [] passwordDecrypt= decrypt (bs,loadedKeyPair.getPrivate() ); String ReadPasswordFile = new String (passwordDecrypt); System.out.println("\n" + "密碼從檔案讀取後" + "\n" + "解密取得之字串= " + ReadPasswordFile ); return ReadPasswordFile; } //私鑰解密 public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception{ Cipher cipher=Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(content); } //從path讀取金鑰檔 public static KeyPair loadKeyPair(String path, String algorithm) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { // Initiate the factory with specified algorithm. KeyFactory keyFactory = KeyFactory.getInstance(algorithm); PublicKey publicKey = null; // Read private key from file. File fileForPrivateKey = Paths.get(path, "private.key").toFile(); //log.trace("Private key will be loaded from '{}'.", fileForPrivateKey); PrivateKey privateKey = null; try (FileInputStream fis = new FileInputStream(fileForPrivateKey)) { byte[] loadedBytes = new byte[(int) fileForPrivateKey.length()]; fis.read(loadedBytes); PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(loadedBytes); privateKey = keyFactory.generatePrivate(privateKeySpec); } return new KeyPair(publicKey, privateKey); } }
沒有留言:
張貼留言