C#/.NET/Android/Java/IOS AES通用加密解密算法
2016-11-10 13:31:55  By: dwtedx

记得前几天分享了一个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

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+