]> source.dussan.org Git - poi.git/commitdiff
Fix 1.6ism
authorNick Burch <nick@apache.org>
Thu, 3 Jun 2010 14:58:02 +0000 (14:58 +0000)
committerNick Burch <nick@apache.org>
Thu, 3 Jun 2010 14:58:02 +0000 (14:58 +0000)
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

index a47100d696f95ae05928391dfadd7741c61a8fc9..7b36dc4e01332020e0191b6201fe971cb05710f2 100644 (file)
@@ -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++) {