Тема: EncDec на Java
Показать сообщение отдельно
Непрочитано 12.07.2013, 00:05   #1
Аватар для ALF.
Герой

Автор темы (Топик Стартер) EncDec на Java

Всем привет! Пишу небольшой проект на джавке.
В функции декрипта файла l2.ini (официального, без применения патча) после того как декриптовал и осталось только анпакнуть с GZ вылетает ошибка
Код:
java.util.zip.ZipException: invalid distance too far back
	at java.util.zip.InflaterInputStream.read(Unknown Source)
	at java.util.zip.InflaterInputStream.read(Unknown Source)
	at ua.alf.Decrypt.decrypt(Decrypt.java:72)
	at ua.alf.Starter.main(Starter.java:16)
Вот сам код:
PHP код:
package ua.alf;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;

public class 
Decrypt {    
    private static final 
String MOD_STR 
            
"97df398472ddf737ef0a0cd17e8d172f" // 32
            
"0fef1661a38a8ae1d6e829bc1c6e4c3c" // 64
            
"fc19292dda9ef90175e46e7394a18850" // 96
            
"b6417d03be6eea274d3ed1dde5b5d7bd" // 128
            
"e72cc0a0b71d03608655633881793a02" // 160
            
"c9a67d9ef2b45eb7c08d4be329083ce4" // 196
            
"50e68f7867b6749314d40511d09bc574" // 228
            
"4551baa86a89dc38123dc1668fd72d83";  // 256
    
    
private static final BigInteger MOD  = new BigInteger(MOD_STR16);
    private static final 
BigInteger EXPONENT = new BigInteger("35"16);
    private static final 
int BLOCK_SIZE 128;
    private static final 
int HEADER_SIZE 28;
    
    public static 
void decrypt(File file) {            
        if (!
file.exists())
            return;
        
        if (
file.length() < BLOCK_SIZE HEADER_SIZE)
            return;
        
        
int blocks = (int) ((file.length() - HEADER_SIZE) / BLOCK_SIZE);
        
        
ByteArrayOutputStream bos = new ByteArrayOutputStream();
        
        try {        
            
FileInputStream fis = new FileInputStream(file);
            
fis.skip(HEADER_SIZE);
            
            for (
int i 0blocksi++) {
                
byte[] raw = new byte[BLOCK_SIZE];    
                
fis.read(raw);
                
                
BigInteger data = new BigInteger(raw);
                
data data.modPow(EXPONENTMOD);
                
                
byte[] decRaw data.toByteArray();
                
int size decRaw[0];
                
                if (
size == 124
                    
bos.write(decRawdecRaw.length sizesize);
                else {
                    
int dd decRaw.length size;
                    while (
dd && decRaw[dd-1] != '\0')
                        
dd--;
                    
bos.write(decRawddsize);
                }                    
            }
            
            
fis.close();
            
bos.flush();            
            
            
byte[] dd bos.toByteArray();
            
            
bos.reset();
            
InflaterInputStream iis = new InflaterInputStream(new ByteArrayInputStream(dd4dd.length-4));
            while (
iis.available() > 0)
                
bos.write(iis.read());
            
            
String s = new String(bos.toByteArray());
            
System.out.println(s);
            
        } catch (
IOException e) {
            
e.printStackTrace();
        }    
    }

Я такой ошибки никогда не встречал и никак не могу понять почему она выскакивает

Добавлено через 7 минут
p.s. Вот реализации на пхп и на перле http://coderx.ru/showthread.php?t=8789
p.p.s. Не пойму что же я упустил....

Последний раз редактировалось ALF.; 12.07.2013 в 00:13. Причина: Добавлено сообщение
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием