Buscar aquí

Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

sábado, 1 de julio de 2017

Instalar Java en la memoria RAM

Pasos para instalar Java en la memoria RAM:

  1. Asegurar que se tiene tmpfs: se digita el comando mount
  2. Se crea un directorio donde se alojará java: sudo mkdir /media/java_ram
  3. Se monta el directorio: sudo mount -t tmpfs tmpfs /media/java_ram
  4. Se instala squashfs: sudo apt install squashfs
  5. Se crea el archivo de squash: sudo mksquashfs /opt/java/jdk1.8.0_131/ /opt/java/java.sqsh
  6. Se monta la partición: sudo mount /opt/java/java.sqsh /media/java_ram/ -t squashfs -o loop
  7. Se instala la nueva versión en las alternativas: sudo update-alternatives --install /usr/bin/java java /media/java_ram/bin/java 1; sudo update-alternatives --install /usr/bin/javac javac /media/java_ram/bin/javac 1
  8. Se selecciona: sudo update-alternatives --config java; sudo update-alternatives --config javac
Para hacer los cambios permanentes, se hace:

  1. Se edita fstab: sudo nano /etc/fstab
  2. Se agrega:

    tmpfs   /media/java_ram/        tmpfs   defaults,mode=1777      0       0
    /opt/java/java.sqsh     /media/java_ram squashfs        ro,defaults,loop        0       0


martes, 13 de octubre de 2015

Solución de javax.net.ssl.SSLHandshakeException a lo dummy para glassfish

Hola! Hace un rato que no escribo y hoy os vengo a contaros la historia de cuando tuve que enfrentarme al problema de que el servidor glassfish (o java en general), necesita consumir algún servicio de una página web segura. La bitácora (o log) que nos entrega glassfish nos muestra el error javax.net.ssl.SSLHandshakeException 
el cual, como su nombre loo indica, significa que no se ha podido hacer el apretón de manos entre los servidores. Para que esto suceda, ellos deben entender que cada uno es confiable. Es decir, no le voy a dar la mano a cualquiera, salvo que yo confíe en él. Claro, si él me muestra su identificación y ésta es válida en todo el territorio nacional (como la cédula) o internacional (como el pasaporte), es más fácil confiar en él. Ahora, que no hace falta el amigo retardado que piensa que mostrando el carnet del colegio se puede identificar en cualquier parte. Yo confío en él, pero porque se que tiene sus problemas, pero, ya le expliqué que eso no está bien, que lo mejor es que él saque su identificación en una entidad certificadora. Claro, eso implica tener que pagar, y que la entidad lo vea (salvo que seas hijo del registrador).

Ahora bien, todos confíamos en la registraduría o en la central que expide los pasaportes, pero si no, explícitamente tenemos que decirle a los demás que confíe (por favor), en nosotros. Y para ésto hacemos lo siguiente:

Primero, identificar dónde está ese archivo, carpeta o en nuestros recuerdos, que nos muestra quiénes son confiables. En glassfish, normalmente está en el archivo domains.xml (glassfish/domains/domain1/config/domain.xml) y buscamos la línea que dice:


-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}

Generalmente está configurada con el archivo cacerts.jks

Entonces, nos bajamos ese archivo, y luego lo abrimos con un programa similar a key store explorer [1] 







Entonces, la idea es agregar el certificado a este depósito de certificados de confianza. Conseguimos el certificado, así, en chrome, hacemos click en:








Lo exportamos, luego vamos al programa antes mencionado, lo importamos con Tools->Import trusted certificate, Le damos Aceptar, OK, Aceptar. Luego guardamos el archivo cacerts, lo subimos y reiniciamos glassfish. Dudas? Comentarios? Felicitaciones? Escríbanme! :-)

[1] http://keystore-explorer.sourceforge.net/downloads.php



miércoles, 19 de septiembre de 2012

Encriptar y desencriptar entre java y php con AES

Para pode recuperar una contraseña haciendo cifrado simétrico entre java y php, encontré esta solución, pero se me perdió la fuente, tan pronto la sepa la pongo....

Java encriptación:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cifrado;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;


/**
 *
 * @author thaednevol
 */
public class Crypto {
//iv length should be 16 bytes
private String iv = "fedcba9876543210";
private String key = null;
private Cipher cipher = null;
private SecretKeySpec keySpec = null;
private IvParameterSpec ivSpec = null;

/**
* Constructor
*
* @throws Exception
*/
public Crypto(String key) throws Exception {
this.key = key;

// Make sure the key length should be 16
int len = this.key.length();
if(len < 16) {
int addSpaces = 16 - len;
for (int i = 0; i < addSpaces; i++) {
this.key = this.key + " ";
}
} else {
this.key = this.key.substring(0, 16);
}
this.keySpec = new SecretKeySpec(this.key.getBytes(), "AES");
this.ivSpec = new IvParameterSpec(iv.getBytes());
this.cipher = Cipher.getInstance("AES/CBC/NoPadding");
}

/**
* Bytes to Hexa conversion
*
* @param data
* @return
*/
public String bytesToHex(byte[] data) {
if (data == null) {
return null;
} else {
int len = data.length;
String str = "";
for (int i = 0; i < len; i++) {
if ((data[i] & 0xFF) < 16)
str = str + "0" + java.lang.Integer.toHexString(data[i] & 0xFF);
else
str = str + java.lang.Integer.toHexString(data[i] & 0xFF);
}
return str;
}
}

/** Encrpt the goven string
*
* @param plainData
* @throws Exception
*/
public String encrypt(String plainData) throws Exception {

// Make sure the plainData length should be multiple with 16
int len = plainData.length();
int q = len / 16;
int addSpaces = ((q + 1) * 16) - len;
for (int i = 0; i < addSpaces; i++) {
plainData = plainData + " ";
}

this.cipher.init(Cipher.ENCRYPT_MODE, this.keySpec, this.ivSpec);
byte[] encrypted = cipher.doFinal(plainData.getBytes());

return bytesToHex(encrypted);
}

public static void main(String[] args) throws Exception {
Crypto c = new Crypto("D4:6E:AC:3F:F0:BE");
String encrStr = c.encrypt("Hello World");
System.out.println("Encrypted Str :" + encrStr);
}
}

Java desencriptación


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cifrado;

/**
 *
 * @author thaednevol
 */
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Decrypto {
//iv length should be 16 bytes
private String iv = "fedcba9876543210";
private String key = null;
private Cipher cipher = null;
private SecretKeySpec keySpec = null;
private IvParameterSpec ivSpec = null;

/**
* Constructor
*
* @throws Exception
*/
public Decrypto(String key) throws Exception {
this.key = key;

// Make sure the key length should be 16
int len = this.key.length();
if(len < 16) {
int addSpaces = 16 - len;
for (int i = 0; i < addSpaces; i++) {
this.key = this.key + " ";
}
} else {
this.key = this.key.substring(0, 16);
}
this.keySpec = new SecretKeySpec(this.key.getBytes(), "AES");
this.ivSpec = new IvParameterSpec(iv.getBytes());
this.cipher = Cipher.getInstance("AES/CBC/NoPadding");
}

/**
* Hexa to Bytes conversion
*
* @param str
* @return
*/
public byte[] hexToBytes(String str) {
if (str == null) {
return null;
} else if (str.length() < 2) {
return null;
} else {
int len = str.length() / 2;
byte[] buffer = new byte[len];
for (int i = 0; i < len; i++) {
buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);
}
return buffer;
}
}

/** Decrypt the given excrypted string
*
* @param encrStr
* @throws Exception
*/
public String decrypt(String encrData) throws Exception {
this.cipher.init(Cipher.DECRYPT_MODE, this.keySpec, this.ivSpec);
byte[] outText = this.cipher.doFinal(hexToBytes(encrData));

String decrData = new String(outText).trim();
return decrData;
}
public static void main(String[] args) throws Exception {
Decrypto c = new Decrypto("D4:6E:AC:3F:F0:BE");
String decrStr = c.decrypt("1f50a943601d8e29206c716f82e58b8d");
System.out.println("Decrypted Str :" + decrStr);
}
}

Encripción en PHP


$cipher = "rijndael-128"; 
$mode = "cbc"; 
$secret_key = "D4:6E:AC:3F:F0:BE"; 
//iv length should be 16 bytes 
$iv = "fedcba9876543210"; 

// Make sure the key length should be 16 bytes 
$key_len = strlen($secret_key); 
if($key_len < 16 ){ 
$addS = 16 - $key_len; 
for($i =0 ;$i < $addS; $i++){ 
$secret_key.=" "; 

}else{ 
$secret_key = substr($secret_key, 0, 16); 


$td = mcrypt_module_open($cipher, "", $mode, $iv); 
mcrypt_generic_init($td, $secret_key, $iv); 
$cyper_text = mcrypt_generic($td, "Hello World"); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
echo bin2hex($cyper_text); 
?> 


Desencriptar en PHP


$cipher = "rijndael-128"; 
$mode = "cbc"; 
$secret_key = "D4:6E:AC:3F:F0:BE"; 
//iv length should be 16 bytes 
$iv = "fedcba9876543210"; 

// Make sure the key length should be 16 bytes 
$key_len = strlen($secret_key); 
if($key_len < 16 ){ 
$addS = 16 - $key_len; 
for($i =0 ;$i < $addS; $i++){ 
$secret_key.=" "; 

}else{ 
$secret_key = substr($secret_key, 0, 16); 


$td = mcrypt_module_open($cipher, "", $mode, $iv); 
mcrypt_generic_init($td, $secret_key, $iv); 
$decrypted_text = mdecrypt_generic($td, hex2bin("444e6969a269829a3e59a86300614fc5")); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
echo trim($decrypted_text); 

function hex2bin($data){
$bin = "";
$i = 0;
do {
$bin .= chr(hexdec($data{$i}.$data{($i + 1)}));
$i += 2;
} while ($i < strlen($data));

return $bin;
}
?> 


martes, 13 de diciembre de 2011

Java: Nombrar correctamente un identificador

Son las palabras que se usaran para dar nombre a una clase, método, interface, variable o constante, y aunque existen mucha flexibilidad debes tener en cuenta las siguientes reglas para escoger un nombre:

  • Deben ser caracteres Unicode (Amplia posibilidad)
  • Debe comenzar con letra, signo $, o signo _ (underscore), nunca por un numero
  • Luego del primer carácter, puede estar compuesto de letras, números y cualquier carácter luego de 0X00C0 (Esto ultimo es por los carácteres que no son letras (de 0X0041 a 0X007A) y numeros (de 0X0030 a 0X0039) y que estan antes de 0X00C0 como por ejemplo # = 0X0023, < = 0X003C, > = 0X003E, los cuales no se pueden usar como identificadores)
  • La longitud del identificador no importa
  • No puede contener espacios.
  • Java es case-sensitive.
  • Las palabras reservadas de Java no pueden usarse como identificadores.

Son correctos:

$nombre;
_nombre;
____largo;
_$;

Incorrecto:

4numeros;
:d;
mayor>;
public;


Fuentes Java 2,  Benjamin Aumaille

    martes, 10 de noviembre de 2009

    Escoger ruta: JFileChooser

    A la hora de seleccionar la ruta para guardar o obtner un archivo el control JFileChooser es la solucion. A continuacion doy una pequeña descripcion de como usar el control:

    JFileChooser jfc= new JFileChooser(); //Se define el nuevo control JFileChooser
    int seleccion=jfc.showOpenDialog(this); //Se muestra el control y se guarda un valor
    if(seleccion==jfc.APPROVE_OPTION) //int asociado con la accion del usuario
    {
    File archivo=jfc.getSelectedFile(); // Se guarda una referencia al archivo
    path=jfc.getSelectedFile().getAbsolutePath(); //tomo la ruta del archivo
    }

    Con eso ya tenemos la ruta y el archivo....

    jueves, 10 de septiembre de 2009

    MessageBox en Java

    Desde C# en .NET se puede lanzar una ventanita de alerta con MessageBox, para obtener lo mismo en Java se usa:

    JOptionPane.showMessageDialog(Form formulario,String mensaje);

    ASi no lo olvido de nuevo!!!.xD.