关于 PHP Android iOS 通用aes加密

项目当中遇到了关于数据加密的问题,项目是移动端的项目,后台是PHP写的

找了一天,最后找到了,话不多说直接上干货

由于本人是写PHP的,肯定是用的框架啊,找了一下果然有,(我用的是CI,在新版的加密类里),

我想其他不管什么语言的框架大概也会有这种加密算法吧,毕竟这个算法这么出名。

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
class DES extends CI_controller{


	public function __construct(){	
		parent::__construct();
		$this->load->library('encryption');  //引入加密类
	}


	public function decrypt()
	{


		// $key = bin2hex($this->encryption->create_key(16)); //用来生成密钥(每次都不一样)
		$key = 'd1413bc6b256e88353b956a58b3dc2cf';
		$this->encryption->initialize(
		    array(
		    	'driver' => 'mcrypt',       //切换到mcrypt
		        'cipher' => 'aes-128',		//使用aes-128 算法
		        'mode' => 'cbc',			//使用cbc模式
		        'key' => $key  				//密钥
		    )
		);


		/**
		 * 我发现同样的密钥同样的待加密信息,
		 * 加密出来的东西每次都不一样;
		 */
		$plain_text0 = '中华人名共和国万岁!';
		$plain_text = '9056256b2bf5f3dca83b689c007d682d18fbbf04bf5c124eeb6c0949baf8112c7031e662236e5cb60b74fefa4647c4243e2bcb2e0e11418659f6e08d335ee34aLVlkgCrV+GdUgKxqBFx2PPqkfM8OsNshMJePiiK6tLzD+wT8sjmXbQOk3phJaP10';
		$plain_text1 = '100f310fdcba5bf672bc776ea63c2c23dbf76fa01dcda3bda56df8b7a48794aa18579fdd2f196da6aab00adf3abfac0e22a1ec7eb0e640f4f49ee6f7909c9c5chGsK4DLxuRnhSRQfEfNEu4e5hKZo7tPzcdcBm1yiZ7/coJkW5uHIe2R5uaA+loG/';
		
		echo $key;
		echo '</br>';
		echo $ciphertext = $this->encryption->encrypt($plain_text0);  //加密
		echo '</br>';
		echo $this->encryption->decrypt($plain_text);   //解密
		echo '</br>';
		echo $this->encryption->decrypt($plain_text1);   //解密




	}




}



Android 和 iOS的直接给个链接看吧

链接地址 http://blog.csdn.net/huangwenkui1990/article/details/48292865



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中使用AES加密可以使用CommonCrypto库提供的API实现。具体步骤如下: 1. 引入头文件: ```objective-c #import <CommonCrypto/CommonCryptor.h> ``` 2. 定义加密/解密方法: ```objective-c // 加密方法 + (NSString *)encrypt:(NSString *)content key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES256 + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; memset(ivPtr, 0, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; int bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [data bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (status == kCCSuccess) { NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; return [resultData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; } free(buffer); return nil; } // 解密方法 + (NSString *)decrypt:(NSString *)content key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES256 + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; memset(ivPtr, 0, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; NSData *data = [[NSData alloc] initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSUInteger dataLength = [data length]; int bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [data bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (status == kCCSuccess) { NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; return [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; } free(buffer); return nil; } ``` 3. 调用加密/解密方法: ```objective-c NSString *key = @"1234567890123456"; NSString *iv = @"1234567890123456"; NSString *content = @"hello, world"; NSString *encryptedContent = [self encrypt:content key:key iv:iv]; NSLog(@"加密后:%@", encryptedContent); NSString *decryptedContent = [self decrypt:encryptedContent key:key iv:iv]; NSLog(@"解密后:%@", decryptedContent); ``` 需要注意的是,在ECB模式下,iv的值不会被使用,但是仍然需要传入一个长度为16的字符串。另外,加密后的结果需要使用base64编码才能转换为字符串,解密前需要先对密文进行base64解码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值