关于C# AES加密的PaddingMode的问题 20C
    public static string AesEncrypt(string str, string key, string iv)
    {
        if (string.IsNullOrEmpty(str)) return null;

        Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
        byte[] keyArr = Encoding.UTF8.GetBytes(key);
        byte[] ivArr = Encoding.UTF8.GetBytes(iv);

        System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged();

        /***************************这里有问题*****************************/
        rm.Padding = System.Security.Cryptography.PaddingMode.None;
        /******************************************************************/

        rm.Mode = System.Security.Cryptography.CipherMode.CFB;
        rm.BlockSize = 128;

        System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor(keyArr, ivArr);

        Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }

方法调用

String str = "appid=pm93c050eb69884a50&appsecret=b24ee0ef-73be-4a9a-a884-e0c0e27c&timestamp=1489732369";
string aa = AesEncrypt(str, "dha@wjw$pvms9wwl", "8807599889957088");

PaddingMode设置成PaddingMode.None 不填充时 总会报错

有人知道这个问题怎么解决吗


```![图片说明](https://img-ask.csdn.net/upload/201703/21/1490027098_177459.png)

3个回答

不适用填充的话,你如何保证你的明文是AES128(bit)/AES256(bit)的倍数呢?

u014510977
尛丶MaTure 那个是Java代码
接近 3 年之前 回复
yangbo50304
yangbo50304 回复尛丶MaTure: 你确定java端是用了none还是没设置用的默认值?
接近 3 年之前 回复
u014510977
尛丶MaTure 回复yangbo50304: 关键是Java端用的是NOPADDING,这个是不会改的。所以这里要用NONE。
接近 3 年之前 回复
yangbo50304
yangbo50304 设置成PaddingMode.PKCS7试试呢?
接近 3 年之前 回复

public static String aesEncrypt(String str, String key,String iv) throws Exception {
if (str == null || key == null)
return null;
SecretKeySpec keySpec=new SecretKeySpec(key.getBytes("utf-8"), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(Charset.forName("UTF-8")));

    Cipher cipher = Cipher.getInstance("AES/CFB/NOPADDING");

    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

    byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
    return new BASE64Encoder().encode(bytes);
}

c#上加一行试试

rm.FeedbackSize = 8; 
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问