2015-04-03 2 views

ответ

-1

Вы можете использовать AES, DES и 3DES, все они включены в java. Я опубликовал простую программу отсюда http://sanjaal.com/java/186/java-encryption/tutorial-java-des-encryption-and-decryption/, которая использует DES для шифрования/расшифровки

import java.security.spec.KeySpec;

import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESKeySpec; 
import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 

class DESEncryption { 

    private static final String UNICODE_FORMAT = "UTF8"; 
    public static final String DES_ENCRYPTION_SCHEME = "DES"; 
    private KeySpec myKeySpec; 
    private SecretKeyFactory mySecretKeyFactory; 
    private Cipher cipher; 
    byte[] keyAsBytes; 
    private String myEncryptionKey; 
    private String myEncryptionScheme; 
    SecretKey key; 

    public DESEncryption() throws Exception 
    { 
     myEncryptionKey = "ThisIsSecretEncryptionKey"; 
     myEncryptionScheme = DES_ENCRYPTION_SCHEME; 
     keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT); 
     myKeySpec = new DESKeySpec(keyAsBytes); 
     mySecretKeyFactory = SecretKeyFactory.getInstance(myEncryptionScheme); 
     cipher = Cipher.getInstance(myEncryptionScheme); 
     key = mySecretKeyFactory.generateSecret(myKeySpec); 
    } 

    /** 
    * Method To Encrypt The String 
    */ 
    public String encrypt(String unencryptedString) { 
     String encryptedString = null; 
     try { 
      cipher.init(Cipher.ENCRYPT_MODE, key); 
      byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT); 
      byte[] encryptedText = cipher.doFinal(plainText); 
      BASE64Encoder base64encoder = new BASE64Encoder(); 
      encryptedString = base64encoder.encode(encryptedText); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
    /** 
    * Method To Decrypt An Ecrypted String 
    */ 
    public String decrypt(String encryptedString) { 
     String decryptedText=null; 
     try { 
      cipher.init(Cipher.DECRYPT_MODE, key); 
      BASE64Decoder base64decoder = new BASE64Decoder(); 
      byte[] encryptedText = base64decoder.decodeBuffer(encryptedString); 
      byte[] plainText = cipher.doFinal(encryptedText); 
      decryptedText= bytes2String(plainText); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return decryptedText; 
    } 


    private static String bytes2String(byte[] bytes) { 
     StringBuffer stringBuffer = new StringBuffer(); 
     for (int i = 0; i < bytes.length; i++) { 
      stringBuffer.append((char) bytes[i]); 
     } 
     return stringBuffer.toString(); 
    } 

    /** 
    * Testing the DES Encryption And Decryption Technique 
    */ 
    public static void main(String args []) throws Exception 
    { 
     DESEncryption myEncryptor= new DESEncryption(); 

     String stringToEncrypt="Sanjaal.com"; 
     String encrypted=myEncryptor.encrypt(stringToEncrypt); 
     String decrypted=myEncryptor.decrypt(encrypted); 

     System.out.println("String To Encrypt: "+stringToEncrypt); 
     System.out.println("Encrypted Value :" + encrypted); 
     System.out.println("Decrypted Value :"+decrypted); 

    } 

} 
+1

Для того, чтобы заставить функцию шифрования работать на Android, потребовалось немного времени, но я получил ее работу. Большое спасибо! Если кто-либо еще это обнаружит, вот андроидированная версия: http://pastebin.com/aByHyd7x – Boncey

+0

1. В вашем коде есть некоторые html-артефакты. Удалите их. 2. Вы не должны рекомендовать людям использовать DES. Используйте AES или 3DES или Blowfish. DES легко грубодействует. 3. Необходимо иметь целостность шифрованного текста, поэтому необходимо добавить HMAC или еще проще аутентифицированный режим, например GCM. 4. Всегда используйте полностью прописанную строку Cipher, например «AES/CBC/PKCS5Padding» (также @Boncey) –

+0

Я рассмотрю шифрование AES. Я все равно собирался это сделать, но сейчас я только тестирую. Спасибо за совет :) – Boncey

Смежные вопросы