前言

移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如android和iOS的打交道。为了让数据交互更安全,我们需要对数据进行加密传输。

这篇文章给大家分享AES的加密和解密、Android和ios通用的AES加密算法、大家可以直接集成到自己的项目、服务器接口如果是用Java写的话、整个框架都完美了、如果是.NET编写的后台接口的话、得改造一下哦

IOS加密

/*加密方法*/

(NSString *)AES256EncryptWithPlainText:(NSString *)plain {

NSData *plainText = [plain dataUsingEncoding:NSUTF8StringEncoding];

// ´key´ should be 32 bytes for AES256, will be null-padded otherwise

char keyPtr[kCCKeySizeAES256 1]; // room for terminator (unused)

bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

NSUInteger dataLength = [plainText length];

size_t bufferSize = dataLength kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

bzero(buffer, sizeof(buffer));

size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding,

[[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256,

ivBuff /* initialization vector (optional) */,

[plainText bytes], dataLength, /* input */

buffer, bufferSize, /* output */

&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {

NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

return [encryptData base64Encoding];

}

free(buffer); //free the buffer;

return nil;

}

IOS解密

/*解密方法*/

(NSString *)AES256DecryptWithCiphertext:(NSString *)ciphertexts{

NSData *cipherData = [NSData dataWithBase64EncodedString:ciphertexts];

// ´key´ should be 32 bytes for AES256, will be null-padded otherwise

char keyPtr[kCCKeySizeAES256 1]; // room for terminator (unused)

bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

NSUInteger dataLength = [cipherData length];

size_t bufferSize = dataLength kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

[[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256,

ivBuff ,/* initialization vector (optional) */

[cipherData bytes], dataLength, /* input */

buffer, bufferSize, /* output */

&numBytesDecrypted);

if (cryptStatus == kCCSuccess) {

NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

return [[[NSString alloc] initWithData:encryptData encoding:NSUTF8StringEncoding] init];

}

free(buffer); //free the buffer;

return nil;

}

Android加密

private byte[] encrypt(String cmp, SecretKey sk, IvParameterSpec IV,

byte[] msg) {

try {

Cipher c = Cipher.getInstance(cmp);

c.init(Cipher.ENCRYPT_MODE, sk, IV);

return c.doFinal(msg);

} catch (NoSuchAlgorithmException nsae) {

Log.e("AESdemo", "no cipher getinstance support for " cmp);

} catch (NoSuchPaddingException nspe) {

Log.e("AESdemo", "no cipher getinstance support for padding " cmp);

} catch (InvalidKeyException e) {

Log.e("AESdemo", "invalid key exception");

} catch (InvalidAlgorithmParameterException e) {

Log.e("AESdemo", "invalid algorithm parameter exception");

} catch (IllegalBlockSizeException e) {

Log.e("AESdemo", "illegal block size exception");

} catch (BadPaddingException e) {

Log.e("AESdemo", "bad padding exception");

}

return null;

}

Android解密

private byte[] decrypt(String cmp, SecretKey sk, IvParameterSpec IV,

byte[] ciphertext) {

try {

Cipher c = Cipher.getInstance(cmp);

c.init(Cipher.DECRYPT_MODE, sk, IV);

return c.doFinal(ciphertext);

} catch (NoSuchAlgorithmException nsae) {

Log.e("AESdemo", "no cipher getinstance support for " cmp);

} catch (NoSuchPaddingException nspe) {

Log.e("AESdemo", "no cipher getinstance support for padding " cmp);

} catch (InvalidKeyException e) {

Log.e("AESdemo", "invalid key exception");

} catch (InvalidAlgorithmParameterException e) {

Log.e("AESdemo", "invalid algorithm parameter exception");

} catch (IllegalBlockSizeException e) {

Log.e("AESdemo", "illegal block size exception");

} catch (BadPaddingException e) {

Log.e("AESdemo", "bad padding exception");

e.printStackTrace();

}

return null;

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位开发者们能有所帮助,如果有疑问大家可以留言交流。

android java加密_Android、iOS和Java通用的AES128加密解密示例代码相关推荐

  1. Java EasyExcel在Web网站中读写Excel的方法及示例代码

    使用EasyExcel可以更容易简单在Web网站中读写Excel,本文主要介绍在Java Web网站中读写Excel方法及示例代码. 原文地址:Java EasyExcel在Web网站中读写Excel ...

  2. android java rsa加密_Android RSA与Java RSA加密不一样标准产生问题的解决方法

    最近作一个基于android的客户端,客户端与Java服务器 (MyEclipse自带的Tomcat服务器)的通讯须要实施安全方案.而本人是使用非对称密钥来对数据进行加密的,客户端用公钥加密,服务器用 ...

  3. android自定义push通知_android通过自定义toast实现悬浮通知效果的示例代码

    android通过toast实现悬浮通知效果,如图: 实现的功能: 自定义悬浮弹窗: 点击其他地方该布局不受影响: 可自定义显示时间: 可以设置点击事件: 代码如下: import android.c ...

  4. java图片放大_【图像处理-图像无损放大】JavaAPI示例代码

    属于内测接口,需要申请哦. 接口说明:http://ai.baidu.com/docs#/ImageProcessing-API/815af37c 需要用到的第三方jar com.alibaba fa ...

  5. android 圆形相机预览拍照_Android多种方式实现相机圆形预览的示例代码

    效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, att ...

  6. java实时汇率的接口_eoLinker-API_Shop_汇率查询_API接口_Java调用示例代码

    eoLinker-API Shop 汇率查询 Java调用示例代码 汇率查询 提供汇率转换.单个货币对应的热门货币汇率行情,包括人民币.美元.欧元.英镑等100多种货币的实时汇率查询. 该产品拥有以下 ...

  7. java 添加一个线程、创建响应的用户界面 。 演示示例代码

    javajava 添加一个线程.创建响应的用户界面 . 演示示例代码 来自thinking in java 4 21章  部分的代码  夹21.2.11 thinking in java 4免费下载: ...

  8. java 如何导出json文件_java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...

  9. java雪崩_【并发编程】java 如何解决redis缓存穿透、缓存雪崩(高性能示例代码)...

    [并发编程]java 如何解决redis缓存穿透.缓存雪崩(高性能示例代码) 发布时间:2018-11-22 16:48, 浏览次数:872 , 标签: java redis <>缓存穿透 ...

  10. JAVA锁之可重入锁和递归锁及示例代码

    概念:可重入锁 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代 ...

最新文章

  1. 基于C++Opencv的傅里叶变换代码
  2. 按下回车表示确定提交
  3. 【ACM】杭电OJ 1004
  4. 铁大Facebook——十天冲刺(5)
  5. php编程神器,PHP代码神器 十个PHP代码片段超极好用
  6. html grid插件,miniGrid:轻量级流布局JS插件
  7. EXCEL中VLOOKUP做精确匹配匹配后日期显示为00-Jan-00,教你如何解决
  8. 宝塔php7.1地址在哪里,宝塔Linux面板安全入口地址忘了(方法一)
  9. 【设计模式 04】代理模式
  10. Django组件 中间件
  11. 人生最要紧的是充实自己
  12. SQL存储过程实例详解
  13. Arduino+sim800 gsm收发短信
  14. STM32LCD液晶屏显示二值图片
  15. 网站如何做域名转移?闲置域名要及时处理
  16. Web3:价值投资的范式转移
  17. 导入excel时报错The supplied data appears to be in the Office 2007+ XML.
  18. 对Carrier IQ木马的综合分析报告
  19. PTA 02-线性结构3 Reversing Linked List 题目解析
  20. 8月推荐给程序员们的电子书 | 附半价电子书福利

热门文章

  1. 浏览器导出ssl证书导入jdk
  2. 【学习点滴】linux调试工具、cmake和网络抓包
  3. 漫谈数据保护和个人信息加密
  4. GitHub上受欢迎的Android UI Library
  5. 7-22 循环日程表
  6. Cohort analysis
  7. ElementUI TimePicker固定时间范围,开始时间小于结束时间
  8. ICG-NHS吲哚菁绿-琥珀酰亚胺脂的相关简介;CAS: 1622335-40-3
  9. Python使用正则表达式提取文本中ABAC和AABB形式的成语
  10. 昆明发生两起公汽爆炸案2死10伤