2017-05-20 1 views
1

java.lang.String을 byte []로 변환 할 수없는 이유를 알지 못합니다.Java 컴파일러는 byte []가 문자열이라고 생각합니다.

byte[] decData = io.decrypt(fileData, new Random(fileData.length)); 

내 컴파일러는 말했다 : java.lang.String의가 []

하지만이 같은 FILEDATA를 초기화 바이트에 변환 할 수 없습니다 라인에

byte[] fileData = new byte[fIn.available()]; 

그리고 io.decrypt는 다음과 같이 정의됩니다.

public static String decrypt(byte[] data, Random key) { 
    byte[] byteKey = new byte[data.length]; 
    key.nextBytes(byteKey); 
    return decrypt(data, byteKey); 
} 

무작위로 java.util.Random으로

그래서 나는 왜 잘못했는지 이해하지 못합니다.

는 Btw는 : 나는 간단한 XOR EN/드 crypter에게

를 만들기 위해 노력하고있어 그리고 이것은 전체 코드입니다 :

Boolean decrypt = praseBoolean(Greenfoot.ask("decrypt? (y/n)")); 

    //Random rand = new Random(); 

    if(!decrypt) { 
     File folder = new File("decrypted"); 
     File[] toEncrypt = folder.listFiles(); 
     //Long[] keys = 
     for(File file: toEncrypt) { 
      FileInputStream fIn = new FileInputStream(file); 
      byte[] fileData = new byte[fIn.available()]; 
      fIn.read(fileData); 
      byte[] encData = io.encrypt(fileData, new Random(fileData.length)); 
      io.saveEncryptedFile(encData, "encrypted/"+file.getName()); 
     } 
    } 

    if(decrypt) { 
     File folder = new File("encrypted"); 
     File[] toEncrypt = folder.listFiles(); 
     //Long[] keys = 
     for(File file: toEncrypt) { 
      FileInputStream fIn = new FileInputStream(file); 
      byte[] fileData = new byte[fIn.available()]; 
      fIn.read(fileData); 
      byte[] decData = io.decrypt(fileData, new Random(fileData.length)); 
      io.saveEncryptedFile(encData, "decrypted/"+file.getName()); 
     } 
    } 
+1

왜 '문자열'을'byte [] '에 저장하려고합니까? 'decrypt' 반환 유형을 확인하십시오 ... – Li357

+1

방금 ​​잊어 버렸습니다. 제 컴파일러는 그다지 좋지 않아서 논쟁을 선택했습니다. 그래서 저는 당황한 사람들을 보았습니다. – fejfo

+0

'String'은 (논리적으로)'byte []'가 아니므로'char []'과 비슷합니다. 챠와 바이트는 같은 것이 아닙니다. –

답변

2

io.decrypt 반환 String,하지만 당신은 byte[]에 결과를 할당 . 그래서

byte[] decData = io.decrypt(fileData, new Random(fileData.length)).getBytes(); 

또는

String decData = io.decrypt(fileData, new Random(fileData.length)); 
+0

감사합니다, 나는 지금 내가 어리 석다는 것을 보았습니다. – fejfo

1

decryptString 반환로 변경,하지만 당신은 byte[] decData에 할당하려는. 그냥 String에 assing, 당신은 확인을해야한다 :

String decData = io.decrypt(fileData, new Random(fileData.length)); 
+0

감사합니다. 나는 지금 바보 같다고 생각합니다. – fejfo

1

귀하의 해독 방법은 String을 반환합니다. 바이트 배열을 가져 오려면 메서드의 결과에 string.getBytes()을 사용하거나 처음부터 바이트 배열을 반환하십시오.

+0

감사합니다. 나는 바보 같다고 생각합니다. – fejfo

관련 문제