2014-09-23 36 views
0

我已經給出了.key(abc.key)文件。 使用上述.key文件,加密和解密在Java中完成。在這裏我需要使用C#.net來實現相同的加密和解密功能。如何使用AES算法加密

請給我想法如何解決這個問題。我是這些密碼學的新手。

它們在java中設置的一些參數如下。希望它不會有什麼想法

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

任何幫助將不勝感激。

更新:

@daveBM:我用BouncyCastle的但m到處不同的結果(未一樣的java輸出)。下面是我的完整代碼

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

可能不是一個很好的想法,在世界範圍內發佈您的密鑰。 – 2014-09-23 15:36:11

+0

在這裏回答:http://lamahashim.blogspot.com/2009/08/encyptiondecryption-in-c-and-java.html – mikeswright49 2014-09-23 15:36:50

+1

使用彈性城堡庫 - 並做一些谷歌搜索 - 它更容易與www一起工作。 bouncycastle.org – daveBM 2014-09-23 16:03:57

回答

1

你可以使用這個代碼,有人親切地發佈在其他一些相關的問題。

Encrypting & Decrypting a String in C#

你需要做的是使用的方法加密(字符串明文字符串密碼)其中明文是要加密的任何和口令是你的內容。密鑰文件。

順便說一句,只是提到你有.key文件就足夠了。我們不需要知道內容:) ..

希望可以幫到