英文:
java jasypt suddenly crashes
问题
自从昨天起,我的文本加密器(jasypt)无故停止工作了。以下是代码示例和错误信息。有人知道发生了什么吗?
代码示例:
StrongTextEncryptor crypter = new StrongTextEncryptor();
crypter.setPassword("Password");
crypter.encrypt("Test");
错误信息:
Exception in thread "main" org.jasypt.exceptions.EncryptionInitializationException: java.lang.ExceptionInInitializerError
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:773)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.initialize(StandardPBEStringEncryptor.java:566)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:644)
at org.jasypt.util.text.StrongTextEncryptor.encrypt(StrongTextEncryptor.java:107)
at A.main(A.java:8)
Caused by: java.lang.ExceptionInInitializerError
at com.ibm.icu.impl.NormalizerDataReader.<clinit>(NormalizerDataReader.java:300)
at com.ibm.icu.impl.NormalizerImpl.<init>(NormalizerImpl.java:288)
at com.ibm.icu.impl.NormalizerImpl.<clinit>(NormalizerImpl.java:35)
at com.ibm.icu.text.Normalizer$Mode.normalize(Normalizer.java:188)
at com.ibm.icu.text.Normalizer.normalize(Normalizer.java:1177)
at com.ibm.icu.text.Normalizer.normalize(Normalizer.java:1146)
at org.jasypt.normalization.Normalizer.normalizeWithIcu4j(Normalizer.java:205)
at org.jasypt.normalization.Normalizer.normalizeToNfc(Normalizer.java:129)
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:718)
... 4 more
Caused by: java.lang.IllegalArgumentException: Invalid version number: Version number may be negative or greater than 255
at com.ibm.icu.util.VersionInfo.getInstance(VersionInfo.java:188)
at com.ibm.icu.impl.ICUDebug.getInstanceLenient(ICUDebug.java:65)
at com.ibm.icu.impl.ICUDebug.<clinit>(ICUDebug.java:69)
... 13 more
英文:
Since yesterday my textencrypter(jasypt) stopped working for no reason. Here is a code example and the error msg. Does anybody know what is going on?
Code example:
StrongTextEncryptor crypter = new StrongTextEncryptor();
crypter.setPassword("Password");
crypter.encrypt("Test");
Error msg:
Exception in thread "main" org.jasypt.exceptions.EncryptionInitializationException: java.lang.ExceptionInInitializerError
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:773)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.initialize(StandardPBEStringEncryptor.java:566)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:644)
at org.jasypt.util.text.StrongTextEncryptor.encrypt(StrongTextEncryptor.java:107)
at A.main(A.java:8)
Caused by: java.lang.ExceptionInInitializerError
at com.ibm.icu.impl.NormalizerDataReader.<clinit>(NormalizerDataReader.java:300)
at com.ibm.icu.impl.NormalizerImpl.<init>(NormalizerImpl.java:288)
at com.ibm.icu.impl.NormalizerImpl.<clinit>(NormalizerImpl.java:35)
at com.ibm.icu.text.Normalizer$Mode.normalize(Normalizer.java:188)
at com.ibm.icu.text.Normalizer.normalize(Normalizer.java:1177)
at com.ibm.icu.text.Normalizer.normalize(Normalizer.java:1146)
at org.jasypt.normalization.Normalizer.normalizeWithIcu4j(Normalizer.java:205)
at org.jasypt.normalization.Normalizer.normalizeToNfc(Normalizer.java:129)
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:718)
... 4 more
Caused by: java.lang.IllegalArgumentException: Invalid version number: Version number may be negative or greater than 255
at com.ibm.icu.util.VersionInfo.getInstance(VersionInfo.java:188)
at com.ibm.icu.impl.ICUDebug.getInstanceLenient(ICUDebug.java:65)
at com.ibm.icu.impl.ICUDebug.<clinit>(ICUDebug.java:69)
... 13 more
答案1
得分: 18
这不是一个直接的答案,但我把它放在这里,以防有人遇到这个问题。
在使用Java 1.8.0_275时,当运行encrypt.sh
时,我遇到了一个
java.lang.ExceptionInInitializerError
的错误。
Jasypt版本1.9.3使用了icu4j-3.4.4.jar的旧版本。我用icu4j-68_2.jar替换了icu4j-3.4.4.jar,然后我就能够运行:
./encrypt.sh input=password password=aSecret algorithm=PBEWithMD5AndDES
而没有错误。
更多信息,请参见https://github.com/jasypt/jasypt/issues/58。尽管这与您运行jasypt的方式有些不同,但我建议更新icu4j.jar,然后再次尝试。
英文:
This is not a direct answer, but I'm putting it here in case someone runs upon the issue.
Using Java 1.8.0_275, I was getting a
java.lang.ExceptionInInitializerError
when running the encrypt.sh
.
Jasypt version 1.9.3 is using an old version of icu4j-3.4.4.jar. I replaced the icu4j-3.4.4.jar with icu4j-68_2.jar then I was able to run:
./encrypt.sh input=password password=aSecret algorithm=PBEWithMD5AndDES
without error.
For more information, see https://github.com/jasypt/jasypt/issues/58. Even though this is a little different from how you're running jasypt, I'd recommend updating the icu4j.jar and try again.
答案2
得分: 1
问题似乎与icu4j有关(至少在我的情况下是这样)。
在jasypt的Github上找到了这个提交:https://github.com/jasypt/jasypt/commit/d384f9a755af2938bc142f7575365bee42ba5f22
更新了依赖项后,应用程序开始运行。
英文:
Problem seems to be related (at least in my case) to icu4j.
Found this commit on jasypt Github https://github.com/jasypt/jasypt/commit/d384f9a755af2938bc142f7575365bee42ba5f22
Updated dependency and application started running.
答案3
得分: 0
在 GitHub 上 jasypt 的问题 44 的评论中提到,只需删除旧的 icu4j-3.4.4.jar 文件。换句话说,不必费力寻找替代品。对我来说运行正常。:-) 感谢 Brad Rippe 提供线索!
DSOANS 在 2020 年 8 月 24 日发表评论
> 似乎修复方法是删除 com.ibm.icu4j jar
> (icu4j-3.4.4.jar)文件从分发中 - 至少对我们来说是这样的。
https://github.com/jasypt/jasypt/issues/44
英文:
A jasypt issue 44 comment on github says just to remove the old icu4j-3.4.4.jar. IOW, don't bother tracking down a replacement. Worked OK for me. Thanks Brad Rippe
for providing the clue!
DSOANS commented on Aug 24, 2020
> It appears the fix is to REMOVE the com.ibm.icu4j jar
> (icu4j-3.4.4.jar) file from the distribution - at least that seems to
> have worked for us.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论