java.. C# 使用AES加密互解 采用AES-128-ECB加密模式

java需要下载外部包, commons codec.jar 1.6  較新的JAVA版本把Base64的方法改成靜態方法,可能會寫成
Base64.encodeToString(encrypted, 0);

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

/**

 *

 * @author Administrator

 *

 */

public class AES {

    // 加密

    public static String Encrypt(String sSrc, String sKey) throws Exception {

        if (sKey == null) {

            System.out.print("Key为空null");

            return null;

        }

        // 判断Key是否为16位

        if (sKey.length() != 16) {

            System.out.print("Key长度不是16位");

            return null;

        }

        byte[] raw = sKey.getBytes("utf-8");

        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"

        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

        return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。

    }

    // 解密

    public static String Decrypt(String sSrc, String sKey) throws Exception {

        try {

            // 判断Key是否正确

            if (sKey == null) {

                System.out.print("Key为空null");

                return null;

            }

            // 判断Key是否为16位

            if (sKey.length() != 16) {

                System.out.print("Key长度不是16位");

                return null;

            }

            byte[] raw = sKey.getBytes("utf-8");

            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

            cipher.init(Cipher.DECRYPT_MODE, skeySpec);

            byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密

            try {

                byte[] original = cipher.doFinal(encrypted1);

                String originalString = new String(original,"utf-8");

                return originalString;

            } catch (Exception e) {

                System.out.println(e.toString());

                return null;

            }

        } catch (Exception ex) {

            System.out.println(ex.toString());

            return null;

        }

    }

    public static void main(String[] args) throws Exception {

        /*

         * 此处使用AES-128-ECB加密模式,key需要为16位。

         */

        String cKey = "1234567890123456";

        // 需要加密的字串

        String cSrc = "www.gowhere.so";

        System.out.println(cSrc);

        // 加密

        String enString = AES.Encrypt(cSrc, cKey);

        System.out.println("加密后的字串是:" + enString);

        // 解密

        String DeString = AES.Decrypt(enString, cKey);

        System.out.println("解密后的字串是:" + DeString);

    }

}

C#

/// <summary>

       /// 有密码的AES加密

       /// </summary>

       /// <param name="text">加密字符</param>

       /// <param name="password">加密的密码</param>

       /// <param name="iv">密钥</param>

       /// <returns></returns>

       public static string Encrypt(string toEncrypt,string key)

       {

           byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

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

           RijndaelManaged rDel = new RijndaelManaged();

           rDel.Key = keyArray;

           rDel.Mode = CipherMode.ECB;

           rDel.Padding = PaddingMode.PKCS7;

           ICryptoTransform cTransform = rDel.CreateEncryptor();

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

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

       }

       /// <summary>

       /// AES解密

       /// </summary>

       /// <param name="text"></param>

       /// <param name="password"></param>

       /// <param name="iv"></param>

       /// <returns></returns>

       public static string Decrypt(string toDecrypt,string key)

       {

           byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

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

           RijndaelManaged rDel = new RijndaelManaged();

           rDel.Key = keyArray;

           rDel.Mode = CipherMode.ECB;

           rDel.Padding = PaddingMode.PKCS7;

           ICryptoTransform cTransform = rDel.CreateDecryptor();

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

           return UTF8Encoding.UTF8.GetString(resultArray);

       }

原文地址:https://www.cnblogs.com/qizhuocai/p/8465957.html

时间: 2024-08-29 01:58:31

java.. C# 使用AES加密互解 采用AES-128-ECB加密模式的相关文章

C#与java中的AES加解密互解算法

一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string val) { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged

我的Android进阶之旅------&gt;Android采用AES+RSA的加密机制对http请求进行加密

前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密方案 Android端 AESRSA结合实践 基本要求 基本流程 Android端 服务器端 java版示例 更多参考 前言 最近维护公司APP应用的登录模块,由于测试人员用Fiddler抓包工具抓取到了公司关于登录时候的明文登录信息.虽然使用的是HTTPS的方式进行http请求的,但还是被Fidd

Java利用 DES / 3DES / AES 这三种算法分别实现 对称加密

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了. 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂. 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用.包含

java加密算法入门(三)-非对称加密详解

1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便大家理解.最后就是关于代码的demo,DH算法.RSA算法本文中只有最基础的用法,实际在工作中可能会涉及到密钥的转换X509EncodedKeySpec和PKCS8EncodedKeySpec,相关的demo名分别叫DH2Test,RSA2Test,已经上传GIT.如果对您有帮助,请给我个star.

对称加密详解,以及JAVA简单实现

(原) 常用的加密有3种 1.正向加密,如MD5,加密后密文固定,目前还没办法破解,但是可以能过数据库撞库有一定概率找到,不过现在一般用这种方式加密都会加上盐值. 2.对称加密,通过一个固定的对称密钥,对需要传输的数据进行加解密,速度快,但是安全性不高,主要用于企业级内部系统中数据传输. 3.非对称加密,N把公钥,一把私钥,私钥存放在服务器一方保管,公钥放可以放在任何一个客户端,客户端向服务器请求的密文只有拿到了私钥的服务器一端可以解密. 这里有个概念解释一下, 随机盐值(solt): abcd

常见的加密和解密算法—AES

一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一. Rijndae

Android传输数据时加密详解

Android传输数据时加密详解 ONE Goal , ONE Passion ! ------–MD5加密------- MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现.将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2.MD3和MD4 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定

【Android开发经验】DES加密时代的终结者——AES加密算法

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中,我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了如何才能实现不同平台下加密算法的一致性.不过话说起来,DES算法是在1976年被美国的国家标准局定为联邦资料的加密标准的,到现在已经接近40年了.我们都知道,在计算机的世界里有一个摩尔定律,就是每过18个月,计算机的晶体管的数量就会翻一番,对应的计算速度也会翻倍,虽然现在的发展速度有所放缓,但是每过三年左右,计

详解 HTTPS 移动端对称加密套件优

近几年,Google.Baidu.Facebook 等互联网巨头大力推行 HTTPS,国内外的大型互联网公司很多也都已启用全站 HTTPS. Google 也推出了针对移动端优化的新型加密套件 ChaCha20-Poly1305. 又拍云 CDN 已经全面支持 Google 推出的针对移动端优化的加密套件-- ChaCha20-Poly1305.又拍云平台上所有的 CDN 用户都可以享受到该算法加解密性能提升,网页加载时间减少,电池寿命延长等优势. 在这之前又拍云一直在对 HTTPS 性能进行持