2015-01-13 4 views
2

3DES를 사용하여 데이터를 암호화/해독해야합니다. 나와 공유 된 열쇠는 다음과 같은 형태로 존재합니다.3DES 주요 구성 요소

요소 1 = 이진수 11111111111111111111111111111111

부품 (2) = 22222222222222222222222222222222

KVC = ABCD1234

I는 상기 성분들로부터의 3DES 키를 만들기 위해 필요하거나, K1, K2, K3 서브 키

하위 키는 16 바이트 길이이지만 32 바이트 길이라는 것을 알고 있습니다.

3DES 키를 만드는 절차를 공유하십시오.

+1

제시하는 데이터를 이해하는 데 필요한 정보가 충분하지 않습니다. –

+0

은 구성 요소를 KEY로 변환하는 데 사용되는 프로세스/알고리즘 만 있으면됩니다. http://www.emvlab.org/keyshares/의 온라인 키 생성기가 내 KCV 값과 일치하지 않습니다. – kasai

답변

-1

다음 링크로 다운로드 할 수있는 전자 계산기를 사용하십시오 : https://eftcalculator.codeplex.com/ 보유하고있는 모든 구성 요소를 XOR하면 3DES 키가 생깁니다. 결과를 확인하려면 결과 계산기와 동일한 계산기를 사용하여 '0000000000000000'을 암호화하면됩니다. 결과로 키 확인 값 (KCV)을 갖게됩니다.

길이가 32 바이트 인 3DES 키가 16 진수로 표시됩니다. 이 문자열을 바이트로 압축하면 16 바이트 (문자열의 1 바이트 == 2 진수 문자)가됩니다.

+0

참고 : 3DES 키는 24 바이트입니다. 온라인 [3DES 계산기]가 있습니다 (http : //extranet.cryptomathic .com/descalc/index). – zaph

1
  1. 16 진수 문자열을 바이트 배열로 변환합니다. 32 문자는 16 바이트를 제공합니다.
  2. 3des는 3 개의 8 바이트 키가 필요하므로 24 바이트가 필요합니다. 그러나 첫 번째와 세 번째 키는 동일 할 수 있습니다. 따라서 처음 8 바이트를 끝까지 복사하여 배열을 24 바이트로 확장해야합니다. 이 24 바이트 배열은 암호화 및 암호 해독에 사용할 수있는 결과 키입니다.
  3. 확인하지 않으려면 키를 사용하여 '0000000000000000'문자열 (8 바이트 0 또는 16 진수 16 문자)을 암호화하십시오. 인코딩 된 결과의 시작 부분은 KCV와 같아야합니다.
+0

어떻게 단계 2)? –

3

HexStringToByte 표준 방법을 사용하여 일반 구성 요소를 바이트 배열로 변환합니다. 아래의 메소드에 3 바이트 배열을 전달하십시오. 결과는 http://www.emvlab.org/keyshares/에서 확인할 수 있습니다. 여기서 샘플 데이터이다 :

  • CC1 : 447FC2AA6EFFFEE5405A559E88DC958C
  • CC2 : 1086F0493DB0EFE42EDF1BC99541E96F
  • CC3 : D1C603D64D1EDC9D3CA78CD95D168E40 키
  • 결과 : 853F31351E51CD9C5222C28E408BF2A3
  • 결과 키 KVC : 1E49C1
public static byte[] buildKey(byte[] cc1, byte[] cc2, byte[] cc3) { 
    byte[] result = new byte[cc1.length]; 
    int i = 0; 
    for (byte b1: cc1) { 
    byte b2 = cc2[i]; 
    byte b3 = cc3[i]; 
    result[i] = (byte)(b1^b2^b3); 
    i++; 
    } 
    return result; 
} 
+0

이것은 의미가 없습니다. 16 진수의 cc1, cc2 abd cc3은 각각 16 바이트입니다. 3DES 전체 키는 24 바이트입니다. – zaph

0

나는 가지고 있었다. 같은 문제. 두 개의 주요 구성 요소가 위의 예제를 계속 :

구성 요소 1 = 이진수 11111111111111111111111111111111

구성 요소를 2 = 22222222222222222222222222222222

당신이하지 않는 한 당신은, 제 3 성분을 추가해야 0이 될 것입니다.

구성 요소 3 = 000000000000000000000000000000

@Slav에서 제공하는 방법을 사용하면 실제 마스터 키가 제공됩니다.

byte[] masterKey = buildKey (component1, component2, component3) ; remember those values has to be in hexa. 

이제 당신은 다음과 같이 암호화 된 값은 당신이 암호를 해독합니다 있다고 가정하자 : 좀 더 자세한 정보가 필요하면

byte[] plainValue = tripleDESDecrypt (encryptedValue, masterKey); 

는, 자바 파일을 보낼 저에게 연락 주시기 바랍니다.

+0

일반적으로 2TDEA에서 2 키 3DES는 첫 번째와 마지막 8 바이트가 동일합니다. – zaph

+0

네, 맞습니다.하지만 그건 열쇠입니다. 여기서 우리가 가지는 것은 우리가 XOR을 만드는 구성 요소입니다. 결과 키가 16 바이트이면 첫 번째 8 바이트를 추가하여 키에 추가합니다. 일반적으로 이것은 .net의 TripleDes 구현에서 자동으로 수행됩니다. –

+0

"일반적으로 .net의 TripleDes 구현에서 자동으로 수행됩니다. 예, * 일반적으로 * 다른 구현에서는 항상 그런 것은 아닙니다. 그 대답에 큰 도움이 될 것입니다. 전체 24 바이트 키를 제공하는 것이 더 낫습니다. 모호성이없고 구현에 별다른 문제가 없습니다. 값이 무엇인지, 큰 정수, ASCII 문자, 16 진수로 인코딩 된 바이너리인지 명확하지 않은 WRT 질문을하십시오. 당신은 일반적으로 올바른 선택을했습니다. – zaph