2013-04-26 2 views
-1

문자열을 읽을 수없는 (사람의 경우) 읽을 수있는 문자열로 변경하고 다시 읽을 수있게하려면 가능한 짧고 빠른 코드가 필요합니다. Java에서 모든 것이 필요합니다. 이 같은java - 문자열을 읽을 수 없도록합니다.

뭔가 :

encrypt("test"); 

이 같은 결과겠습니까 :

ôT¿ÄÜTV CÁˆ“5="ËÂÀœššbÀß{¡ä³ 

decrypt("ôT¿ÄÜTV CÁˆ“5 1="ËÂÀœššbÀß{¡ä³"); 

보다 다시 원래

test 
0으로 초래

어떤 방향으로 가야합니까?이 작업을 수행 할 수있는 수업이 있습니까? 나는 Base68Encryption과 같은 것을 의미하지 않으며, 무엇이라도 불릴 수도 있습니다. 나는 인터넷을 통해 안전하게 보낼 수있는 진정한 읽을 수없는 텍스트를 의미합니다.

+1

Base_64는 사람이 읽을 수 있습니까? 음, 당신은 똑똑한 인간들을 알고 있습니다. – jn1kk

+0

암호화 된 메시지를 공개적으로 공유하려면 공유 암호 또는 공개/개인 키 암호화가 필요합니다. 실제로 어떤 위협으로부터 보호해야하는지 자세히 설명해주십시오. 캐주얼 읽기? 더 강한 무엇인가? –

+0

http://stackoverflow.com/questions/8622367/what-are-best-practices-for-using-aes-encryption-in-android?rq=1 – durron597

답변

1

다음은 실제 암호화를 사용하는 간단한 예입니다. 그것은 128 비트 AES입니다. 이것은 상상의 모든 스트레칭으로는 확실히 읽을 수 없습니다.

임의의 키를 생성하므로 매번 실행마다 다릅니다. 어떻게 든 데이터를 교환하는 두 프로그램간에 키를 공유해야합니다.

private static final String ENCRYPTION_ALGORITHM = "AES/ECB/PKCS5Padding"; 
private static final SecureRandom RANDOM = new SecureRandom(); 

public static void main(String[] args) throws UnsupportedEncodingException, GeneralSecurityException { 
    final KeyGenerator keyGen = KeyGenerator.getInstance(ENCRYPTION_ALGORITHM.substring(0, ENCRYPTION_ALGORITHM.indexOf('/'))); 
    keyGen.init(128, RANDOM); 
    final SecretKey key = keyGen.generateKey(); 
    final String s = "My topsecret string"; 
    System.out.println(s); 
    final Cipher encryption = getCipher(key, Cipher.ENCRYPT_MODE); 
    final String enc = DatatypeConverter.printBase64Binary(encryption.doFinal(s.getBytes("UTF-8"))); 
    System.out.println(enc); 
    final Cipher decryption = getCipher(key, Cipher.DECRYPT_MODE); 
    final String dec = new String(decryption.doFinal(DatatypeConverter.parseBase64Binary(enc)), "UTF-8"); 
    System.out.println(dec); 
} 

private static Cipher getCipher(final Key key, final int mode) throws GeneralSecurityException { 
    final Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM); 
    cipher.init(mode, key, RANDOM); 
    return cipher; 
} 

출력 :

My topsecret string 
ip4La5KUBJGTTYenoE920V5w0VBHwALv4fp3qyLTY9o= 
My topsecret string 
0

내가 가야 무엇 방향, 나를 위해이 작업을 수행 할 수 있습니다 어떤 종류입니까? 나는 Base68Encryption과 같은 것을 의미하지 않으며, 무엇이라도 불릴 수도 있습니다. 나는 인터넷을 통해 안전하게 보낼 수있는 진정한 읽을 수없는 텍스트를 의미합니다.

  • 당신은 전형적인 JVM에서 표준으로 구현되는 기존의 높은 품질의 암호화 시스템 중 하나를 선택할 수 있습니다 :

는이 문제를 해결하는 방법은 두 가지가 있습니다. 그 다음 :

  1. 문자열을 바이트로 인코딩합니다. 예 : UTF-8을 사용합니다.

  2. 동의 한 암호화 시스템과 이전에 합의한 키를 사용하여 바이트를 암호화하십시오.

  3. base_64 또는 이와 동등한 것을 사용하여 바이트를 인 코드하십시오.

및 타단

:

  1. 를 디코딩 base_64

  2. 동일한 시스템 키 바이트 해독.

  3. String을 얻기 위해 UTF-8을 디코드하십시오.

  • SSL/TLS를 사용하여 TCP/IP 연결을 보호하고 연결을 통해 String을 그대로 보냅니다.

  • 이 옵션 중 어느 것도 특히 빠릅니다. 그러나 자신 만의 빠른 암호화 시스템을 만들려고 유혹 당하지 마십시오. 기회는 "가정 양조"암호화 시스템이므로 깨닫는 것보다 훨씬 쉬울 것입니다.