`

实现android的AES加密技术

 
阅读更多

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之命名之,投稿高级加密标准的甄选流程(Rijdael的发音近于 “Rhine doll”)。

AES 加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte)。(Rijndael加密法因支援更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

1. AddRoundKey — 矩阵中的每一个字节都与该次循环的子密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
2. SubBytes — 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
3. ShiftRows — 将矩阵中的每个横列进行循环式移位。
4. MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每行内的四个字节。

最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。


import java.security.SecureRandom;   
  
import javax.crypto.Cipher;   
import javax.crypto.KeyGenerator;   
import javax.crypto.SecretKey;   
import javax.crypto.spec.SecretKeySpec;   
  
  
public class SimpleCrypto {   
  
    public static String encrypt(String seed, String cleartext) throws Exception {   
        byte[] rawKey = getRawKey(seed.getBytes());   
        byte[] result = encrypt(rawKey, cleartext.getBytes());   
        return toHex(result);   
    }   
       
    public static String decrypt(String seed, String encrypted) throws Exception {   
        byte[] rawKey = getRawKey(seed.getBytes());   
        byte[] enc = toByte(encrypted);   
        byte[] result = decrypt(rawKey, enc);   
        return new String(result);   
    }   
  
    private static byte[] getRawKey(byte[] seed) throws Exception {   
        KeyGenerator kgen = KeyGenerator.getInstance("AES");   
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");   
        sr.setSeed(seed);   
        kgen.init(128, sr); // 192 and 256 bits may not be available   
        SecretKey skey = kgen.generateKey();   
        byte[] raw = skey.getEncoded();   
        return raw;   
    }   
  
       
    private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {   
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");   
        Cipher cipher = Cipher.getInstance("AES");   
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);   
        byte[] encrypted = cipher.doFinal(clear);   
        return encrypted;   
    }   
  
    private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {   
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");   
        Cipher cipher = Cipher.getInstance("AES");   
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);   
        byte[] decrypted = cipher.doFinal(encrypted);   
        return decrypted;   
    }   
  
    public static String toHex(String txt) {   
        return toHex(txt.getBytes());   
    }   
    public static String fromHex(String hex) {   
        return new String(toByte(hex));   
    }   
       
    public static byte[] toByte(String hexString) {   
        int len = hexString.length()/2;   
        byte[] result = new byte[len];   
        for (int i = 0; i < len; i++)   
            result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).bytue();   
        return result;   
    }   
  
    public static String toHex(byte[] buf) {   
        if (buf == null)   
            return "";   
        StringBuffer result = new StringBuffer(2*buf.length);   
        for (int i = 0; i < buf.length; i++) {   
            appendHex(result, buf[i]);   
        }   
        return result.toString();   
    }   
    private final static String HEX = "0123456789ABCDEF";   
    private static void appendHex(StringBuffer sb, byte b) {   
        sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));   
    }   
       
} 

 加密:String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);

解密:String originalText = SimpleCrypto.decrypt(masterpassword, encryptingCode);

  • 大小: 49.1 KB
分享到:
评论
3 楼 lishiyaowanmei 2011-11-07  
并且对同一个字符 同样的公钥 在两个虚拟机中加密的结果都不一样 解密就不用说了
2 楼 lishiyaowanmei 2011-11-07  
算法是没有问题的 在dvm中加密和解密密钥问题 在jvm中加密和解密也没有问题  但是在dvm加密,jvm解密 不行的 ,同样反之也不行
1 楼 lishiyaowanmei 2011-11-07  
您在android客户端和服务器端 传递数据用过吗

相关推荐

    基于Android+Java的 AES 加密算法分析.zip

    开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序...

    基于android的AIS数据传输,使用AES加密.zip

    开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序...

    Android JNI加密项目,目前集合DES,AES两种加密算法.zip

    资源包中的文件手册部分,详细记录了Android开发的核心知识点和常用技术。无论是初学者还是有一定经验的开发者,都能从中找到所需的学习资料。手册采用了简洁明了的排版方式,使得查阅更加方便快捷。同时,手册内容...

    AES_ECB_PKCS5Padding openssl加解密方式

    由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,php端采用openssl加解密方式。调试可以访问http://tool.chacuo.net/cryptaes

    论文研究-基于Android智能终端的敏感数据保护技术的研究与实现 .pdf

    基于Android智能终端的敏感数据保护技术的研究与实现,夏冰,马兆丰,提出了一种基于AES加密的文件保护和填充粉碎删除数据的Android敏感数据保护的新方法,该方法通过采用AES加密技术对用户选择的个人数��

    Andriod平台下的文件共享及其安全技术研究与实现.doc

    本文研究了Android平台的应用设计开发以及常用的文件传输协议和数据加密技术。针对文件传输方案的设计实现,重点研究了AES加密算法和SSL安全协议。通过分析比较,根据本文件传输方案的特点,采用AES加密算法、SSL...

    AES-Java-iOS-Android.zip

    兼容Java,iOS,Android三端的AES-128-ECB加密算法,附三端Demo Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司于1995年5月正式发布。它的设计目标是“一次编写,到处运行(Write Once, Run ...

    EncryptedSharedPreferences:为Android SharedPreferences提供加密

    它使用AES 128位加密技术来保护数据安全,并且与UTF-8兼容元素兼容。 ====================== Gradle集成: 添加存储库依赖项: repositories { jcenter() maven { url ...

    Password Manager

    使用sqlite保存数据,所有账户密码使用AES加密后存储,保证数据安全。 功能: 1. 登录,用户管控。 2. 增、删、修改、查看用户保存数据 涉及android开发技术 1.activity切换 2.option menu/Context menu 3....

    Android应用源码有三种算法的文件加密器.zip

    翻了下菜单看了有文件加密、文件解密、报文鉴别、编辑文件、删除文件等功能,加密有des、desede、aes三种算法,因为小编不了解加密解密这一块所以就不妄加评论技术细节了,了解这一块的朋友自己下载研究一下吧,默认...

    至佳私密禁卫军 v2.4.0.0.zip

    至佳私密禁卫军是由上海至佳信息技术有限公司自主研发的一款应用于个人私密信息保护软件,采用了独创的磁盘动态加密技术和系统乱码路径技术使用户能快速实现对文件高强度的加密和深度隐藏,采用了杂合加密算法确保...

    AESUtils-Android

    "AES": 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...

    坚果云全平台客户端 v3.4.4.0官方版.zip

    坚果云提供最简单易用的免费云存储服务, 让您随时随地访问自己的文件. 支持windows, linux, mac osx, android, ios等所有平台....自动发现局域网内的设备,P2P智能传输,使用AES加密传输数据,无时无刻保护数据隐私

    坚果云 windows客户端 v2.1.1.zip

    每个上传到坚果云的文件都被独有的分布式加密技术加密,并存储在多个不同的服务器上。文件可靠备份,安全级别堪比网银。   文件时光机 坚果云自动会记录文件修改的每个版本,任意时刻可将文件恢复到任意版本。...

    李清林_Android_3.5年1

    1、HTTP通信过程传输加密,使用AES+RSA技术实现,确保密文传输,提高安全性 2、是同TCP协议与设备通信 4、语音助手模块 1、后端:使用SpringM

    Libtrac:Libtrac Android移动应用程序

    服务器端:技术NODE JS框架EXPRESS JS编程语言JavaScript和python数据交换格式REST API进行JSON使用的加密高级加密标准(AES)操作系统Linux Ubuntu编程IDE Sublime文本 数据库:技术MONGO DB – NoSQL版本:2.6.5 ...

    星月金锁 密码管理 0.999

    使用了高级别的安全加密技术(AES),全方位保护您的数据。 对安全敏感的用户往往很在意应用访问手机的权限。星月金锁并无需访问手机的任何权限,除了备份数据需要读写SD卡,它不会联网,也不会访问手机上的任何隐私...

    低延迟Android-iOS-Linux-Windows-tvOS-macOS-交互式音频平台::regional_indicator_symbol_letter_s:超强音频,网络和加密SDK。 在Android,iOS,macOS,tvOS,Linux,Windows和现代Web浏览器上的高性能和跨平台

    借助针对台式机,移动设备,物联网和嵌入式设备的构建,可在Android,iOS,macOS,tvOS,Linux和Windows上实现的便携式和跨平台,以及针对ARM32,ARM64,x86和x64的特定于处理器的构建。技术,SDK和代码...

    物联网平台源码适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等.zip

    硬件 SDK: 支持WIFI和MQTT连接、物模型响应、实时监测、定时上报监测数据、AES加密、NTP时间等 物模型管理: 属性 (设备状态和监测数据) ,功能(执行特定任务),事件(设备主动上报给云端) 其他功能:多租户、统计、...

Global site tag (gtag.js) - Google Analytics