2015-12-10 20 views
1

我正在ESAPI測試基本的東西,我跑過this symmetric encryption tutorial並複製和粘貼代碼(以及導入ESAPI 2.1.0 jar文件,ESAPI.properties和validation.properties' SRC」在Eclipse目錄)從教程ESAPI對稱加密使用JavaEncryptor

修改後的代碼:

import org.owasp.esapi.crypto.CipherText; 
import org.owasp.esapi.crypto.PlainText; 
import org.owasp.esapi.errors.EncryptionException; 
import org.owasp.esapi.reference.crypto.JavaEncryptor; 

public class ESAPIsymEncTester { 

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

     String myplaintext = "My plaintext"; 

      CipherText ciphertext = 
        JavaEncryptor.getInstance().encrypt(new PlainText(myplaintext)); 
     PlainText recoveredPlaintext = JavaEncryptor.getInstance().decrypt(ciphertext); 
      assert myplaintext.equals(recoveredPlaintext.toString()); 

      System.out.println("recovered plaintext: " + recoveredPlaintext.toString()); 
    } 
} 

然而,當我使用Java 1.8運行這個在Eclipse紅月,我得到這個堆棧跟蹤:

Exception in thread "main" org.owasp.esapi.errors.EncryptionException: Encryption failure: Invalid key exception. 
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:526) 
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:338) 
at com.fate.engine.test.ESAPIsymEncTester.main(ESAPIsymEncTester.java:15) 
Caused by: java.security.InvalidKeyException: Invalid AES key length: 96 bytes 
at com.sun.crypto.provider.AESCipher.engineGetKeySize(AESCipher.java:495) 
at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1062) 
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1033) 
at javax.crypto.Cipher.init(Cipher.java:1367) 
at javax.crypto.Cipher.init(Cipher.java:1301) 
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:504) 
... 2 more 

我不確定這是否是JavaEncryptor.java代碼中的錯誤,或者我是否從ESAPI.properties文件中提取了某些錯誤配置。

我通過運行JavaEncryptor並複製/粘貼生成的密鑰/鹽來替換主密鑰和鹽。

如果是一個錯誤,我會通過電子郵件發送給ESAPI的工作人員,以澄清我如何解決這個問題,因爲我查看了JavaEncryptor代碼,並沒有完全清楚所有部分來自哪裏。

Encryptor.MasterKey = WppLubGgsc/p6HhvcPf2LA ==

Encryptor.MasterSalt = YokRN9mjMUTZspEbzBY90NA6EC8 =

Encryptor.PreferredJCEProvider =

Encryptor.EncryptionAlgorithm = AES

Encryptor.CipherTransformation = AES/CBC/PKCS5Padding

個Encryptor.cipher_modes.combined_modes = GCM,CCM,IAPM,EAX,OCB,CWC

Encryptor.cipher_modes.additional_allowed = CBC

Encryptor.EncryptionKeyLength = 128

Encryptor.ChooseIVMethod =隨機

Encryptor.fixedIV = 0x000102030405060708090a0b0c0d0e0f

Encryptor.CipherText.useMAC =真

ENCR yptor.PlainText.overwrite =真

Encryptor.HashAlgorithm = SHA-512 *****

Encryptor.HashIterations = 1024

Encryptor.DigitalSignatureAlgorithm =帶DSA的SHA1

Encryptor.DigitalSignatureKeyLength = 1024

Encryptor.RandomAlgorithm = SHA1PRNG

Encryptor.CharacterEncoding = UTF-8

Encryptor.KDF。PRF = HMACSHA1 *****

+0

從esapi.properties中添加了加密器設置。星星是我過去在某些時候調整過的星星。 – adv

回答

1

你忘了你的日誌中最重要的部分放到了一個問題:

Dec 11, 2015 8:05:24 AM org.owasp.esapi.reference.JavaLogFactory$JavaLogger log 
WARNING: [SECURITY FAILURE Anonymous:[email protected] -> /JavaEncryptor] Encryption key length mismatch. ESAPI.EncryptionKeyLength is 128 bits, but length of actual encryption key is 24 bits. Did you remember to regenerate your master key (if that is what you are using)??? 

這是一個線索,有東西在這裏,庫希望你去做。

在我看來,你可能有默認的加密性能在esapi.properties這樣設置:

Encryptor.MasterKey=owasp1 
Encryptor.MasterSalt=testtest 

JavaEncryptor有會爲你生成有效性能的主要方法。在eclipse或通過命令行運行它。它會給你值esapi.properties來代替,就像這樣:

Dec 11, 2015 8:10:25 AM org.owasp.esapi.reference.JavaLogFactory$JavaLogger log 
OFF: [SECURITY AUDIT Anonymous:[email protected] -> /SecurityProviderLoader] No Encryptor.PreferredJCEProvider specified. 
SecurityConfiguration for Encryptor.EncryptionKeyLength not an integer in ESAPI.properties. Using default: 128 
Generating a new secret master key 
    use '-print' to also show available crypto algorithms from all the security providers 
SecurityConfiguration for Encryptor.EncryptionKeyLength not an integer in ESAPI.properties. Using default: 128 

Copy and paste these lines into your ESAPI.properties 

#============================================================== 
Encryptor.MasterKey=qW0Qw+8eb1Zu1MBv5djwqA== 
Encryptor.MasterSalt=b0VappFU1Hd6LjIt+TGYqQlfrdU= 
#============================================================== 

一旦我做到了,你的代碼示例運行就好了。

+0

我目前沒有記錄器工作,所以我只是在Eclipse中向控制檯傾倒痕跡,但MasterKey和MasterSalt完全是(格式化的),就像運行JavaEncryptor main的輸出一樣。事實上,你有它運行雖然意味着我有東西在esapi.properties搞砸了。 我現在只需要找到它。 – adv

+0

確保您沒有輸入兩次主密鑰和主鹽。 – avgvstvs

+0

我沒有兩個MasterKey/MasterSalts,所以其他東西在工作。我會一直啄食它,因爲我有時間。任何進一步的想法總是歡迎引導我peckings。 – adv

1

這裏就是我要建議......從GitHub搶TEST版本ESAPI.properties的(「wget的https://github.com/ESAPI/esapi-java-legacy/blob/master/src/test/resources/esapi/ESAPI.properties」應該工作,你用「混帳」,或者從瀏覽器保存)把它放在適當的位置,然後首先按原樣使用它。如果失敗了,那麼你在調整代碼時會出現問題。如果它起作用,那麼ESAPI.properties文件中存在問題。很多人已經提出了什麼可能是錯誤的,但是這些差異應該足夠小,以至於你應該能夠通過區分你自己而不是src/test/resources/esapi/ESAPI中的TEST版本來發現它們的.properties。 (順便說一句,生產版本在'configuration/esapi/ESAPI.properties'下,並且不包含在jar中,因爲pom.xml中有一些錯誤,我不知道該如何解決,因爲我不是Maven guru )

如果您還有其他問題,請通過我的Gmail帳戶與我聯繫,您應該可以通過Google輕鬆找到我的名字和術語「OWASP」。一旦我們找出適合您的答案,您或我可以將答案發回堆棧溢出,但我不經常通過此論壇來定期監視它。 (雖然,想起來了,我可能就得到通知的回覆。)

希望這有助於

-kevin W上。掛牆/ ESAPI加密開發人員和聯合項目負責人

+0

是的,那也是我的下一步。是重建一個原始的測試環境。我在測試部分的更廣泛的項目中測試了這個,但這不是一個可行的測試環境,因爲我調整了esapi.properties中的更多地方。我也在vanland的esapi dev/users郵件列表中。我想我會首先在我們的服務器上對這些文件進行分類,並查看我在過去幾個月中所做的更改。 – adv