From 835efd63de6d91a0a447786a3a14fe4b5fc31a1c Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 3 Jun 2010 14:58:02 +0000 Subject: [PATCH] Fix 1.6ism git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@951016 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/poifs/crypt/Decryptor.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/poi/poifs/crypt/Decryptor.java b/src/java/org/apache/poi/poifs/crypt/Decryptor.java index a47100d69..7b36dc4e0 100644 --- a/src/java/org/apache/poi/poifs/crypt/Decryptor.java +++ b/src/java/org/apache/poi/poifs/crypt/Decryptor.java @@ -26,6 +26,7 @@ import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.security.GeneralSecurityException; import java.security.MessageDigest; @@ -47,9 +48,16 @@ public class Decryptor { private void generatePasswordHash(String password) throws NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + + byte[] passwordBytes; + try { + passwordBytes = password.getBytes("UTF-16LE"); + } catch(UnsupportedEncodingException e) { + throw new RuntimeException("Your JVM is broken - UTF16 not found!"); + } sha1.update(info.getVerifier().getSalt()); - byte[] hash = sha1.digest(password.getBytes(Charset.forName("UTF-16LE"))); + byte[] hash = sha1.digest(passwordBytes); byte[] iterator = new byte[4]; for (int i = 0; i<50000; i++) {