Cómo descifrar archivos de clase JAVA cifrados
import java.io.RandomAccessFile;
clase pública FileEncryptAndDecrypt {
/**
* El archivo está cifrado
* @param fileUrl ruta del archivo
* @param clave contraseña
* @throws Exception
*/
public cifrado vacío estático (String fileUrl, String key) arroja una excepción {
Archivo archivo = nuevo Archivo (fileUrl);
Ruta de cadena = file.substring(0, index) "\" " abc";
Archivo destino = nuevo Archivo(destFile);
InputStream in = nuevo FileInputStream(fileUrl
OutputStream out = nuevo FileOutputStream(destFile); )
byte[] buffer = nuevo byte[1024]
int
byte[] buffer2=nuevo byte[1024]; p >
while (( r= in.read(buffer)) gt; 0) {
for(int i=0; ilt; r; i)
{
byte b=búfer[i];
búfer2[i]=b==255?0: b; > out.write(buffer2, 0, r);
out.flush();
}
in.close();
out.close();
file.delete();
dest.renameTo(new File(fileUrl));
appendMethodA( fileUrl). , clave);
System.out.println("Cifrado correctamente"
}
/**
*<); /p> p>
* @param fileName
* @param content key
*/
public static void appendMethodA(String fileName, String content ) {
prueba {
// Abre una secuencia de archivos de acceso aleatorio para lectura y escritura
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
// Longitud del archivo en bytes
long fileLength = randomFile.length(
);
// Mueve el puntero de escritura del archivo al final del archivo.
randomFile.seek(fileLength);
randomFile.writeBytes(contenido);
randomFile.close()
} captura; (IOException e) {
e.printStackTrace();
}
}
/**
* Descifrado
* @param fileUrl archivo fuente
* @param tempUrl archivo temporal
* @param ketLength longitud de la contraseña
* @return
* @throws Exception
*/
public static String decrypt(String fileUrl, String tempUrl, int keyLength) lanza una excepción {
Archivo archivo = nuevo Archivo(fileUrl);
if (! archivo.
existe()) {
return null;
}
Archivo destino = nuevo Archivo(tempUrl);
if (!dest .getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
InputStream es = new FileInputStream(fileUrl) ;
OutputStream out = new FileOutputStream(tempUrl);
byte[] buffer = nuevo byte[1024];
byte[] buffer2 = nuevo byte[ 1024];
byte bMax = (byte)255;
tamaño largo = file.length() - keyLength;
int mod = (int) ( tamaño1024);
int div = (int) (tamañogt; gt; 10);
int recuento = mod==0?div: (div 1);
int k = 1, r;
while ((k lt; = contar amp; amp; ( r = is.read(buffer) ) gt; 0)) {
if(mod != 0 amp; amp; k==count) {
r = mod
}
for(int i = 0 ;i lt; r;i )
{
byte b=buffer[i];
buffer2[i]=b==0?bMax: --b;
}
out.write(buffer2, 0, r
k
}
out.close();
es.close();
return tempUrl
}
/* *
* Determinar si el archivo está cifrado
* @param fileName
* @return
*/
cadena estática pública readFileLastByte(String fileName, int keyLength) {
Archivo archivo = nuevo Archivo(fileName);
if(!file.exists())return null;
StringBuffer str = new StringBuffer();
try {
// Abre un flujo de archivos de acceso aleatorio, mediante lectura y escritura
RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
// Longitud de
el archivo, en bytes
long fileLength = randomFile.length();
// Mueve el puntero de escritura del archivo al final del archivo.
for(int i = keyLength; igt; =1; i--){
randomFile.seek(fileLength-i);
str.append ((char)randomFile.read());
}
randomFile.close();
return str.toString();
} catch (IOException e) {
e.printStackTrace();
}
devuelve nulo
}
}