首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AES算法进行加密

如何使用AES算法进行加密
EN

Stack Overflow用户
提问于 2014-09-23 23:33:25
回答 1查看 286关注 0票数 0

我给出了一个.key (abc.key)文件。使用上面的.key文件,加密和解密是用Java语言完成的。在这里,我需要使用C#.net实现相同的加密和解密功能。

请告诉我如何破解这个问题。我是密码学方面的新手。

他们在java中设置的一些参数如下所示。希望它不会给出什么想法

代码语言:javascript
复制
    String keyFile="abc.key";
    String keyAlgorithm= "AES";
    String cipherTransformation="AES/CBC/PKCS5Padding";
    String needtoEncStr = "Password1";

任何帮助都将不胜感激。

更新:

@daveBM:我使用了bouncycastle,但我得到了不同的结果(与java输出不同)。下面是我的完整代码

代码语言:javascript
复制
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);

        }

当我的预期输出是“3df36eb77ccfc05e264a6212c2db5380”时,我得到的输出是"S2jjvVJVKfGodPfMuI4v+g==“...请告诉我出了什么问题。

EN

回答 1

Stack Overflow用户

发布于 2014-09-23 23:42:50

你可以使用别人在其他相关问题中贴出的代码。

Encrypting & Decrypting a String in C#

您需要做的是使用方法 encrypt (string plainText,string passPhrase),其中plainText是您想要加密的任何内容,passPhrase是.key文件的内容。

顺便说一下,只要提到您有一个.key文件就足够了。我们不需要知道内容:)..

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25999115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档