2015-12-22 54 views
0

我有一個Java庫來讀取和解密密碼。我遵循它如何讀取密碼來生成密碼文件,它工作正常。現在我想弄清楚如何使用openssl命令來生成密碼文件,因爲這是我們的支持標準。我無法弄清楚使用openssl來完成這項工作的正確命令。相當於openssl命令來加密密碼

這是我的測試代碼來生成密碼文件。它工作正常。

import org.apache.commons.io.IOUtils; 

public class CryptoTest extends TestCase { 

    public void testEncryption() throws Exception { 

     String DEFAULT_ALG = "AES/ECB/PKCS5Padding"; 
     String DEFAULT_SALT = "SALT"; 
     int DEFAULT_ITERATIONS = 10000; 
     int DEFAULT_KEY_LEN = 128; 

     String alg = DEFAULT_ALG; 
     String salt = DEFAULT_SALT; 
     int iterations = DEFAULT_ITERATIONS; 
     int keyLen = DEFAULT_KEY_LEN; 

     SecretKeyFactory factory = null; 
     String passPhrase = "password"; 
     String algOnly = alg.split("/")[0]; 
     String password = "CDE#VFR$"; 

     try { 
      factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
     } catch (NoSuchAlgorithmException e) { 
      throw new IOException("Can't load SecretKeyFactory", e); 
     } 

     SecretKeySpec key = null; 
     try { 
      key = new SecretKeySpec(
        factory.generateSecret(
          new PBEKeySpec(passPhrase.toCharArray(), salt.getBytes(), iterations, keyLen)).getEncoded(), 
        algOnly); 
     } catch (Exception e) { 
      throw new IOException("Can't generate secret key", e); 
     } 

     Cipher crypto = null; 

     try { 
      crypto = Cipher.getInstance(alg); 
     } catch (Exception e) { 
      throw new IOException("Can't initialize the decryptor", e); 
     } 

     byte[] encryptedBytes; 

     try { 
      crypto.init(Cipher.ENCRYPT_MODE, key); 
      encryptedBytes = crypto.doFinal(password.getBytes()); 

      OutputStream os = new FileOutputStream("encrypted.txt"); 
      IOUtils.write(encryptedBytes, os); 

     } catch (Exception e) { 
      throw new IOException("Can't decrypt the password", e); 
     } 
    } 
} 

我想使用openssl生成encrypted.txt文件來實現相同的結果。

回答

0

您應該可以使用以下命令創建hmac: echo「secret」| openssl dgst -sha1 -hmac「key」

+0

這並不能解決我的問題。我需要使用指定的密碼和鹽生成一個文件,其中包含原始純文本「password」的加密結果。 – codingguy

+0

你的意思是說你不知道如何將命令的結果保存在文件中? –