2014-09-23 4 views
0

.key (abc.key) 파일을 제공했습니다. 위의 .key 파일을 사용하면 Java에서 암호화 및 암호 해독이 수행됩니다. 여기에 C# .net을 사용하여 동일한 암호화 및 암호 해독 기능을 구현해야합니다.AES 알고리즘을 사용하여 암호화하는 방법

이 문제를 해결하는 방법을 알려주세요. 나는이 암호화 기법에 초보자이다.

자바에서 설정하는 매개 변수 중 일부는 다음과 같습니다. 작은 생각을 줄 수 있기를 바랍니다.

String keyFile="abc.key"; 
    String keyAlgorithm= "AES"; 
    String cipherTransformation="AES/CBC/PKCS5Padding"; 
    String needtoEncStr = "Password1"; 

어떤 도움을 주시면 감사하겠습니다. I가 사용되지만 bouncycastle (자바 출력과 동일하지 않음) 다른 결과를 얻는 M :

@daveBM을 :

업데이트되었습니다. 아래에있는 내 전체 코드

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using Org.BouncyCastle.Crypto; 
using Org.BouncyCastle.Crypto.Engines; 
using Org.BouncyCastle.Crypto.Generators; 
using Org.BouncyCastle.Crypto.Modes; 
using Org.BouncyCastle.Crypto.Paddings; 
using Org.BouncyCastle.Crypto.Parameters; 
using Org.BouncyCastle.Security; 
using Org.BouncyCastle.Utilities.Encoders; 

public class BCEngine 
{ 
    private readonly Encoding _encoding; 
    private readonly IBlockCipher _blockCipher; 
    private PaddedBufferedBlockCipher _cipher; 
    private IBlockCipherPadding _padding; 

    public BCEngine(IBlockCipher blockCipher, Encoding encoding) 
    { 
     _blockCipher = blockCipher; 
     _encoding = encoding; 
    } 

    public void SetPadding(IBlockCipherPadding padding) 
    { 
     if (padding != null) 
      _padding = padding; 
    } 

    public string Encrypt(string plain, string key) 
    { 
     byte[] result = BouncyCastleCrypto(true, _encoding.GetBytes(plain), key); 
     return Convert.ToBase64String(result); 
    } 

    public string Decrypt(string cipher, string key) 
    { 
     byte[] result = BouncyCastleCrypto(false, Convert.FromBase64String(cipher), key); 
     return _encoding.GetString(result); 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="forEncrypt"></param> 
    /// <param name="input"></param> 
    /// <param name="key"></param> 
    /// <returns></returns> 
    /// <exception cref="CryptoException"></exception> 
    private byte[] BouncyCastleCrypto(bool forEncrypt, byte[] input, string key) 
    { 
     try 
     { 
      _cipher = _padding == null ? new PaddedBufferedBlockCipher(_blockCipher) : new PaddedBufferedBlockCipher(_blockCipher, _padding); 
      byte[] keyByte = _encoding.GetBytes(key); 
      _cipher.Init(forEncrypt, new KeyParameter(keyByte)); 
      return _cipher.DoFinal(input); 
     } 
     catch (Org.BouncyCastle.Crypto.CryptoException ex) 
     { 
      throw new CryptoException(ex.Message); 
     } 
    } 
} 



static void Main(string[] args) 
     { 
      Encoding _encoding; 
      IBlockCipherPadding _padding; 
      string key = "abc.key"; 

      Stream inStr = null; 
      inStr = File.OpenRead(key); 

      Stream stream = inStr; 

      byte[] bytes = new byte[stream.Length]; 

      stream.Position = 0; 

      stream.Read(bytes, 0, (int)stream.Length); 

      string data1 = Encoding.UTF8.GetString(bytes); // this is your string. 


      _encoding = Encoding.ASCII; 
      Pkcs7Padding pkcs = new Pkcs7Padding(); 
      _padding = pkcs; 

      BCEngine bcEngine = new BCEngine(new AesEngine(), _encoding); 
      bcEngine.SetPadding(_padding); 
      string data=bcEngine.Encrypt("AbcDefg12$", data1); 

     } 

내가이 출력을 얻고있다 "S2jjvVJVKfGodPfMuI4v + g =="내 예상 출력은 "3df36eb77ccfc05e264a6212c2db5380는"때 ... 오해는 무슨 일이 일어나고 있는지 알려 주시기 바랍니다 있습니다.

+1

전 세계의 비밀 키를 게시하는 것은 좋지 않을 것입니다. –

+0

여기에 답변 : http : //lamahashim.blogspot.com/2009/08/encyptiondecryption-in-c-and-java.html – mikeswright49

+1

번지 성 라이브러리를 사용하고 www를 사용하여 훨씬 쉽게 작업 할 수 있습니다. bouncycastle.org – daveBM

답변

1

다른 관련 질문에 친절하게 게시 한 코드를 사용할 수 있습니다. 당신이해야 할 일은

Encrypting & Decrypting a String in C#

일반 텍스트는 암호화 할 무엇이며, 암호 당신의 내용이다 방법 암호화 (문자열 일반 텍스트 문자열 암호)를 사용합니다. 키 파일.

그런데 .key 파일을 가지고 있다고 언급하는 것으로 충분했습니다. 우리는 내용을 알 필요가 없습니다 :).

도움이 되길 바랍니다.

관련 문제