2011-05-08 15 views
5

Necesito poder enviar información segura a una variedad de teléfonos desde Windows. Soy un principiante total en el desarrollo de iPhone y Android, pero necesito crear una aplicación fácil de usar para cada entorno. La interfaz con los mensajes de texto SMS recibidos también sería agradable. Me gustaría adquirir el código para el cifrado AES 256 para iPhone, Android y Windows XP (y versiones superiores).Código AES codificado/descifrado compatible con Iphone, Android, Windows/XP

Gracias

Murray

Respuesta

0

diferentes idiomas tienen diferentes implementaciones de las clases de criptografía. Por lo tanto, no creo que haya una sola biblioteca que funcione en todas las plataformas.

No ha especificado qué idioma usa en Windows para su aplicación. T

aquí no es una forma fácil de encriptar y descifrar. Así que le sugiero que al menos obtenga una sólida base sobre cómo funcionan los algoritmos de cifrado con diferentes tamaños de clave, IV, modos de operación y relleno. También cómo generar claves seguras, cómo transferir claves de un usuario a otro usando criptografía asimétrica, etc. ¿O ya tiene los conocimientos teóricos sobre criptografía?

para el iPhone

que no tienen ninguna idea sobre las clases de cifrado proporcionadas en el SDK. Sin embargo, eche un vistazo al this question.

Para Android

usted tiene algunas opciones aquí.

  1. BouncyCastle para Java
  2. javax.crypto paquete.

Here is a question que estaría interesado en.

para Windows.

  1. ¡Hay toneladas! Para C# y C++ y para casi todos los demás idiomas.

También vea my answer para una pregunta similar.

Definitivamente, debe estudiar criptografía antes de implementarlas en su programa. Sería muy fácil usar las funciones integradas, pero si no sabe lo que está haciendo, se está dando una falsa sensación de seguridad y posiblemente esté arriesgando los datos de su cliente.

3

para el iPhone que utiliza AESCrypt-ObjC, y para Android utilizar este código:

public class AESCrypt { 

private final Cipher cipher; 
private final SecretKeySpec key; 
private AlgorithmParameterSpec spec; 


public AESCrypt(String password) throws Exception 
{ 
    // hash password with SHA-256 and crop the output to 128-bit for key 
    MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
    digest.update(password.getBytes("UTF-8")); 
    byte[] keyBytes = new byte[32]; 
    System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length); 

    cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 
    key = new SecretKeySpec(keyBytes, "AES"); 
    spec = getIV(); 
}  

public AlgorithmParameterSpec getIV() 
{ 
    byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; 
    IvParameterSpec ivParameterSpec; 
    ivParameterSpec = new IvParameterSpec(iv); 

    return ivParameterSpec; 
} 

public String encrypt(String plainText) throws Exception 
{ 
    cipher.init(Cipher.ENCRYPT_MODE, key, spec); 
    byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8")); 
    String encryptedText = new String(Base64.encode(encrypted, Base64.DEFAULT), "UTF-8"); 

    return encryptedText; 
} 

public String decrypt(String cryptedText) throws Exception 
{ 
    cipher.init(Cipher.DECRYPT_MODE, key, spec); 
    byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT); 
    byte[] decrypted = cipher.doFinal(bytes); 
    String decryptedText = new String(decrypted, "UTF-8"); 

    return decryptedText; 
} 

}

+0

Funcionó muy bien. ¡Gracias! – gmogames

+0

¡¡Genial .. !! Tome +1 de mí –

+0

Funcionó impecablemente :) +1 – Pihu

1

Si todavía está buscando una aplicación para ambos dispositivos, el iPhone y Android tienen un vistazo a this post . Lo creé junto con un amigo. Debajo de la publicación de iPhone encontrarás la parte de Android.Ambos pueden usarse insertándolos en su proyecto como se explica.

Si desea utilizar otro algoritmo, debe ver cómo se llaman en iPhone y Android y cambiarlo en todas partes dentro de los métodos.

4

Pocas cosas importantes a tener en cuenta al implementar el cifrado AES:
1. Nunca utilice texto sin formato como clave de encriptación. Siempre hash la tecla de texto sin formato y luego utilizar para el cifrado.
2. Utilice siempre Random IV (vector de inicialización) para el cifrado y descifrado. La verdadera aleatorización es importante.
Hace poco escribí la biblioteca de cifrado y descifrado multiplataforma AES para C#, iOS y Android que publiqué en Github. Puede verlo aquí - https://github.com/Pakhee/Cross-platform-AES-encryption

+0

Android tiene limitaciones en el tamaño del montón, ¿su herramienta funciona en archivos grandes (por ejemplo, 100M)? – Jacky

+0

El descifrado no funciona en iOS con su biblioteca. – Vakas

+0

problema al descifrar los datos pasados ​​desde la aplicación móvil de iOS –

Cuestiones relacionadas