2016-11-27 4 views
-1

에 자바 코드 sipnet 변환 상담이 필요 :약 내가 자바 코드 다음 한 C#

static final String KEY_STRING = "MOGO_APP"; 

public static byte[] decrypt(byte[] encrypt) 
{ 
    byte[] bArr = null; 
    Key key = new SecretKeySpec(KEY_STRING.getBytes(), "DES"); 
    Cipher cipher = Cipher.getInstance("DES"); 
    cipher.init(2, key); 
    bArr = cipher.doFinal(encrypt); 
    return bArr; 
} 

는 전 C#로 번역합니다. 여기 내가하는 일이있다 :

const string KEY_STRING = "MOGO_APP"; 

public static byte[] decrypt(byte[] encrypt) 
{ 
    byte[] key = Encoding.ASCII.GetBytes(KEY_STRING); 

    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
    cryptoProvider.Key = key; 

    using (MemoryStream mm = new MemoryStream()) 
    { 
     using (CryptoStream cs = new CryptoStream(mm, 
      cryptoProvider.CreateDecryptor(), CryptoStreamMode.Write)) 
     { 
      cs.Write(encrypt, 0, encrypt.Length); 
     } 
     return mm.ToArray(); 
    } 
} 

그러나 자바 코드와 같은 결과는 나오지 않는다.

자바를 모르겠습니다. 그러나 내가 검색 한 내용에서, 나는 오류 다음있을 수 있습니다 생각 :

  • keyKEY_STRING.getBytes() 앱 (또는 시스템?) 캐릭터 세트에 따라로서, 동일하지 않을 수 있습니다.
  • 변환 된 알고리즘이 신호와 다를 수 있습니다.

The specificed key is not valid size도 표시됩니다.

샘플 입력 및 출력 데이터가 없으므로 단계별 변환을 수행하고 있습니다. 죄송합니다. 오류가있는 위치와 오류를 수정하는 방법을 제안 하시겠습니까?

+1

Welcome to Stack Overflow! 디버거를 사용하는 법을 배워야 할 것 같습니다. [보완적인 디버깅 기술] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참고하십시오. 나중에 문제가 계속되는 경우 자세한 내용을 알려 주시기 바랍니다. –

+0

@JoeC 이미 디버거를 사용하고 있으며 (중간 수준의 프로그래머로서) 어떻게 사용하는지 알고 있습니다. 문제는 Java를 모른다는 것입니다. 질문을주의 깊게 읽으십시오. – Sakura

답변

0

시간을 검색하고 읽은 후 해결책을 찾았습니다. Java의 기본 암호 모드는 ECB이며 C#은 입니다. CBC입니다. Bellowing은 작업 된 코드입니다.

const string KEY_STRING = "MOGO_APP"; 

public static byte[] decrypt(byte[] encrypt) 
{ 
    byte[] key = Encoding.ASCII.GetBytes(KEY_STRING); 

    DESCryptoServiceProvider cp = new DESCryptoServiceProvider(); 
    cp.Mode = CipherMode.ECB; 
    cp.Key = bytes; 
    ICryptoTransform i = cp.CreateDecryptor(); 
    return i.TransformFinalBlock(encrypt, 0, encrypt.Length); 
} 
1

이미 해결책을 찾았 으면 getBytes()/GetBytes() 전화입니다. 사용할 바이트 코드를 명시 적으로 지정하고 C# 및 Java가 동일한 바이트 코딩을 사용하는지 확인해야합니다. 시스템 기본값을 사용하는 것은 대개 플랫폼을 가로 지르는 실수입니다. 인코딩을 선택하십시오 : ASCII, UTF-8 또는 무엇이든 명시 적으로 양쪽에 동일하게 지정하십시오.

+0

해결책을 찾았습니다. 내 대답을 보라. 도와 줘서 고마워! – Sakura