c# AES/CBC/PKCS5Padding

JAVA 【AES/CBC/PKCS5Padding】提供的KEY和IV需要先转换成C#

    private static final String AES_CBC = "AES/CBC/PKCS5Padding";
    private static final byte[] DEFAULT_KEY = new byte[]{-97, 88, -94, 9, 70, -76, 126, 25, 0, 3, -20, 113, 108, 28, 69, 125};
    private static final byte[] DEFAULT_IV = new byte[]{-93, 84, -94, 9, 71, -44, 126, 25, 0, 3, -20, 113, 108, 28, 69, 125};

C# 【AES/CBC/PKCS5Padding】

            byte[] DEFAULT_KEY = new byte[] { -97 + 256, 88, -94 + 256, 9, 70, -76 + 256, 126, 25, 0, 3, -20 + 256, 113, 108, 28, 69, 125 };
            byte[] DEFAULT_IV = new byte[] { -93 + 256, 84, -94 + 256, 9, 71, -44 + 256, 126, 25, 0, 3, -20 + 256, 113, 108, 28, 69, 125 };

 

c#的byte边界值为:0~255,

java的byte边界值为:-128~127。 当byte >=0  && byte <127时, 两边是相等的。 

所以:java的byte转成C#可识别的byte时,如果byte<0, (byte+ 256)  即为C#可识别的byte。( 列个方程:java +256= C# 则  java = C#-256。 若满足条件 java<0,java>=-128 ,即  ( C#-256 < 0 &&   C#-256  >= -128 )

     C#的byte转成java可识别的byte时,如果 byte >0 && byte<=127,可直接int转byte 。如果 byte >=128 则 javabyte = value - 256 

 附上C#加解密代码

        public static string ToAesEncrypt(string toEncrypt, byte[] keyArray, byte[] ivArray) {

            byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);

            using (var rDel = new RijndaelManaged()) {

                rDel.Key = keyArray;
                rDel.IV = ivArray;
                rDel.Mode = CipherMode.ECB;
                rDel.Padding = PaddingMode.PKCS7;

                var resultArray = rDel.CreateEncryptor().TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

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

            }

        }

        public static string ToAesDecrypt(string toDecrypt, byte[] keyArray, byte[] ivArray) {

            byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);

            using (var rDel = new RijndaelManaged()) {

                rDel.Key = keyArray;
                rDel.IV = ivArray;
                rDel.Mode = CipherMode.CBC;
                rDel.Padding = PaddingMode.PKCS7;

                var resultArray = rDel.CreateDecryptor().TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

                return Encoding.UTF8.GetString(resultArray);
            }

        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C#中使用AES/CBC/PKCS5Padding(BlockSize=128)进行加密和解密的示例代码: ```csharp using System; using System.Security.Cryptography; using System.Text; public class AesEncryptionHelper { private const int KeySize = 128; // 设置密钥长度为128位 private const int IvSize = 16; // 设置向量长度为16位 public static string Encrypt(string strToEncrypt, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); byte[] inputBytes = Encoding.UTF8.GetBytes(strToEncrypt); using (Aes aes = Aes.Create()) { aes.KeySize = KeySize; aes.BlockSize = KeySize; aes.Key = keyBytes; aes.IV = ivBytes; aes.Padding = PaddingMode.PKCS7; aes.Mode = CipherMode.CBC; using (ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV)) using (var ms = new System.IO.MemoryStream()) using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) { cs.Write(inputBytes, 0, inputBytes.Length); cs.FlushFinalBlock(); var encryptedBytes = ms.ToArray(); return Convert.ToBase64String(encryptedBytes); } } } public static string Decrypt(string strToDecrypt, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); byte[] inputBytes = Convert.FromBase64String(strToDecrypt); using (Aes aes = Aes.Create()) { aes.KeySize = KeySize; aes.BlockSize = KeySize; aes.Key = keyBytes; aes.IV = ivBytes; aes.Padding = PaddingMode.PKCS7; aes.Mode = CipherMode.CBC; using (ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV)) using (var ms = new System.IO.MemoryStream(inputBytes)) using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { byte[] decryptedBytes = new byte[inputBytes.Length]; int decryptedByteCount = cs.Read(decryptedBytes, 0, decryptedBytes.Length); return Encoding.UTF8.GetString(decryptedBytes, 0, decryptedByteCount); } } } } ``` 使用示例: ```csharp string key = "0123456789abcdef"; // 密钥为16位 string iv = "0123456789abcdef"; // 向量为16位 string plaintext = "Hello World!"; string encrypted = AesEncryptionHelper.Encrypt(plaintext, key, iv); Console.WriteLine("Encrypted: " + encrypted); string decrypted = AesEncryptionHelper.Decrypt(encrypted, key, iv); Console.WriteLine("Decrypted: " + decrypted); ``` 输出结果: ``` Encrypted: h8IRib8wKbe2Q1/xH6uUaQ== Decrypted: Hello World! ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值