2012-09-14 3 views
0

Eclipse에서 Java를 실행하고 있습니다.Java에서 Blowfish 암호화 알고리즘에 타임 스탬프를 어떻게 추가 할 수 있습니까?

나는 Blowfish를 사용하여 암호화되고 다른 끝에서 암호 해독되는 일반 텍스트를 가지고 있습니다. 암호화 된 텍스트가 동일한 일반 텍스트에 대해 매번 다른 시간 스탬프를 추가하려고합니다.

어떻게하면 자바에서 복어 알고리즘에 타임 스탬프를 추가하여 다른 끝에서 해독 할 수 있습니까?

감사합니다.

import BlowfishJ.*; 


public class EncryptBlowFishTest { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 

    long CBCIV = 0x0x765904567324590L; 

    String pwd = "1234567890"; 
    int pwdLength = password.length(); 

    // generate key 
      byte[] testkey = new byte[5]; 


      for (int i = 0; i < testkey.length; i++) 
       testkey[i] = (byte) (i + 1); 


    BlowfishCBC blowfishcbc = new BlowfishCBC(testkey, 0, testkey.length, CBCIV); 

    byte[] tempBuffer = pwd.getBytes(); 

    // align to the next 8 byte border 
      byte[] msgBuffer; 
      int n = pwdLength & 7; 

      if (n != 0) { 
       msgBuffer = new byte[(pwdLength & (~7)) + 8]; 
       System.arraycopy(tempBuffer, 0, msgBuffer, 0, pwdLength); 

       for (int i = pwdLength; i < msgBuffer.length; i++) 
        msgBuffer[i] = 0; 
      } 
      else { 
       msgBuffer = new byte[pwdLength]; 
       System.arraycopy(tempBuffer, 0, msgBuffer, 0, pwdLength); 
      } 

      byte[] showCBCIV = new byte[BlowfishCBC.BLOCKSIZE]; 
      blowfishcbc.getCBCIV(showCBCIV, 0); 

      blowfishcbc.encrypt(msgBuffer, 0, msgBuffer, 0, msgBuffer.length); 

      String encryptedPwd = BinConverter.bytesToBinHex(msgBuffer); 

      System.out.println(encryptedPwd); 

    } 
} 
+2

CBC에 무작위 IV가있는 경우 매번 다를 수 있습니다. 나는 혼란스러워. – gd1

+0

CBC IV는 현재 무작위가 아닙니다. CBC IV는 무작위로 어떻게 만들 수 있습니까? – user717236

+1

@ user717236 간단하게, 당신은'SecureRandom' 인스턴스를 생성합니다 (매개 변수없는 생성자를 사용합니다), 그리고 나서 당신은 암호의 블록 크기를 가진'byte []'를 만듭니다. 그런 다음'SecureRandom.nextBytes()'를 사용하여 바이트 배열을 채 웁니다. 그런 다음 설정해야합니다. IV를 암호문에 선 펜딩 할 수 있습니다. 이것은 꽤 일반적인 관행입니다. –

답변

2

임의의 IV를 대신 사용하십시오. 적절한 길이의 임의의 바이트 순서를 생성하여 IV로 사용하십시오. 암호화 된 메시지와 함께 암호화되지 않은 IV를 보냅니다.

표준 IV (PKCS # 5)는 무작위 IV를 사용합니다.

+0

IV가 암호화 및 암호 해독 종료시 동일해야하지 않습니까? – user717236

+3

IV를 암호문과 함께 보내면 비밀은 아닙니다. :) – gd1

3

다음 모든 것을 암호화, 시간이 일반 텍스트의 첫 번째 부분을 스탬프 확인 :

여기 내 암호화 코드입니다.

+0

즉, 일반 텍스트 앞에 타임 스탬프를 넣고 다른 끝에서 암호가 해독되면 타임 스탬프를 찾아서 추출 하시겠습니까? – user717236

+1

예 또는 독자에게 이해가되면 일반 텍스트의 일부로 표시하십시오. 인간 독자들은 전혀 신경 쓰지 않을 것입니다. – zmbq

1

마찬가지로 zmbq와 마찬가지로 암호화하기 전에 System.currentTimeMillis()을 간단히 추가 할 수 있습니다. 다음 해독 할 때 long을 제거하십시오. 구분 기호를 사용하여 쉽게 제거 할 수 있습니다.