欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

C#/.NET/Android/Java/IOS AES通用加密解密算法

程序员文章站 2022-01-18 10:04:12
...

记得前几天分享了一个Android IOS Java通用的AES128加密解密Demo、这个Demo可以满足用Java开发的后端接口、但是如果不巧你用的.net开发的后台程序、那么我们又应该怎么去编写后端的程序呢!

今天再给大家分享一个比较强大的Demo、可以同时支持Android IOS Java .NET的加密解密的算法Demo、希望对大家有用、今天分享了两个Demo、一个是用CBC模式加密的android、java、ios、.net通用模式、另外一个是ECB模式的android、java、ios、.net通用的加密模式


IOS AES加密

//将string转成带密码的data
 (NSString*)encryptAESData:(NSString*)string
{
    //将nsstring转化为nsdata
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    //使用密码对nsdata进行加密
    NSData *encryptedData = [data AES128EncryptWithKey:KEY gIv:Iv];
    //返回进行base64进行转码的加密字符串
    return [self encodeBase64Data:encryptedData];
}


IOS AES解密

//将带密码的data转成string
 (NSString*)decryptAESData:(NSString *)string
{
    //base64解密
    NSData *decodeBase64Data=[GTMBase64 decodeString:string];
    //使用密码对data进行解密
    NSData *decryData = [decodeBase64Data AES128DecryptWithKey:KEY gIv:Iv];
    //将解了密码的nsdata转化为nsstring
    NSString *str = [[NSString alloc] initWithData:decryData encoding:NSUTF8StringEncoding];
    return str;
}


.NET AES加密

public static string Decrypt(string toDecrypt, string key, string iv)
{
    byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
    byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);

    RijndaelManaged rDel = new RijndaelManaged();
    rDel.Key = keyArray;
    rDel.IV = ivArray;
    rDel.Mode = CipherMode.CBC;
    rDel.Padding = PaddingMode.Zeros;

    ICryptoTransform cTransform = rDel.CreateDecryptor();
    byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

    return UTF8Encoding.UTF8.GetString(resultArray);
}


.NET AES解密
public static string Encrypt(string toEncrypt, string key, string iv)
{
    byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
    byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

    RijndaelManaged rDel = new RijndaelManaged();
    rDel.Key = keyArray;
    rDel.IV = ivArray;
    rDel.Mode = CipherMode.CBC;
    rDel.Padding = PaddingMode.Zeros;

    ICryptoTransform cTransform = rDel.CreateEncryptor();
    byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

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


Android Java加密
// 加密
public String encrypt(String sSrc) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] raw = sKey.getBytes();
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
    return new BASE64Encoder().encode(encrypted);// 此处使用BASE64做转码。
}


Android Java解密

// 解密
public String decrypt(String sSrc) throws Exception {
    try {
        byte[] raw = sKey.getBytes("ASCII");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original, "utf-8");
        return originalString;
    } catch (Exception ex) {
        return null;
    }
}


以上是部分代码、为了让大家在使用的时候更为方法、给大家做了三个Demo、大家可以直接下载使用

ios android .net加密解密源代码下载链接: android ios .net aes加密 密码: v83v