java C# objective-c AES对称加解密
- /**
- * AES加解密
- */
- public class AESHelper {
- final static String AES_KEY = "43hr8fhu34b58123";
- /**
- * AES加密
- *
- * @param text
- * 待加密字符串
- * @return 加密后字符串
- */
- public static String AESEncrypt(String text) {
- try {
- String password = AES_KEY;
- SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
- String strTmp = Base64.encodeToString(cipher.doFinal(text.getBytes()), Base64.DEFAULT);
- return strTmp;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return text;
- }
- /**
- * AES解密
- *
- * @param text
- * 待解密字符串
- * @return 解密后字符串
- */
- public static String aesDecrypt(String text) {
- try {
- String password = AES_KEY;
- SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipher.init(Cipher.DECRYPT_MODE, skeySpec);
- String strTmp = new String(cipher.doFinal(Base64.decode(text, Base64.DEFAULT)));
- return strTmp;
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return text;
- }
- }
Java
- public class AESHelper
- {
- const string AES_KEY = "43hr8fhu34b58123";
- /// <summary>
- /// AES加密
- /// </summary>
- /// <param name="Text">待加密字符串</param>
- /// <returns>加密后字符串</returns>
- public static string AESEncrypt(string Text)
- {
- try
- {
- string key = AES_KEY;
- //分组加密算法
- AesCryptoServiceProvider aes =new AesCryptoServiceProvider();
- byte[] inputByteArray = Encoding.UTF8.GetBytes(Text);//得到需要加密的字节数组
- //设置密钥及密钥向量
- aes.Key = Encoding.UTF8.GetBytes(key);
- //aes.IV = Encoding.UTF8.GetBytes(key);
- aes.Mode = CipherMode.ECB;
- aes.Padding = PaddingMode.PKCS7;
- byte[] cipherBytes = null;
- using (MemoryStream ms = new MemoryStream())
- {
- using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
- {
- cs.Write(inputByteArray, , inputByteArray.Length);
- cs.FlushFinalBlock();
- cipherBytes = ms.ToArray();//得到加密后的字节数组
- cs.Close();
- ms.Close();
- }
- }
- return Convert.ToBase64String(cipherBytes);
- }
- catch { }
- return Text;
- }
- /// <summary>
- /// AES解密
- /// </summary>
- /// <param name="Text">待解密字符串</param>
- /// <returns>解密后字符串</returns>
- public static string AESDecrypt(string Text)
- {
- try
- {
- string key = AES_KEY;
- byte[] cipherText = Convert.FromBase64String(Text);
- AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
- aes.Key = Encoding.UTF8.GetBytes(key);
- //aes.IV = Encoding.UTF8.GetBytes(key);
- aes.Mode = CipherMode.ECB;
- aes.Padding = PaddingMode.PKCS7;
- byte[] decryptBytes = new byte[cipherText.Length];
- using (MemoryStream ms = new MemoryStream(cipherText))
- {
- using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
- {
- cs.Read(decryptBytes, , decryptBytes.Length);
- cs.Close();
- ms.Close();
- }
- }
- return Encoding.UTF8.GetString(decryptBytes).Replace("\0", ""); //将字符串后尾的'\0'去掉
- }
- catch { }
- return Text;
- }
- }
C#
- /*
- *.h文件
- */
- #import <Foundation/Foundation.h>
- @interface Security : NSObject
- +(NSString*)AesEncrypt:(NSString*)str;
- +(NSString*)AesDecrypt:(NSString*)str;
- @end
- --------------------------------------------------------------------------------
- /*
- *.m文件
- */
- #import "Security.h"
- #import <CommonCrypto/CommonCryptor.h>
- static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- #define LocalStr_None @"" //空字符串
- @implementation Security
- /*
- * AES加密
- *
- */
- +(NSString*)AesEncrypt:(NSString*)str{
- NSString *key=@"43hr8fhu34b58123"; // 密钥
- NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding]; // 待加密字符转为NSData型
- char keyPtr[kCCKeySizeAES128 + ];
- memset(keyPtr, , sizeof(keyPtr));
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [data length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- voidvoid *buffer = malloc(bufferSize);
- size_t numBytesCrypted = ;
- CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
- kCCAlgorithmAES128,
- kCCOptionPKCS7Padding|kCCOptionECBMode,
- keyPtr,
- kCCBlockSizeAES128,
- nil,
- [data bytes],
- dataLength,
- buffer,
- bufferSize,
- &numBytesCrypted);
- if (cryptStatus == kCCSuccess) {
- NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
- NSString *result =[self base64EncodedStringFrom:resultData];
- return result;
- }
- free(buffer);
- return str;
- }
- /*
- * AES解密
- *
- */
- +(NSString*)AesDecrypt:(NSString*)str{
- NSString *key=@"Q*1_3@c!4kd^j&g%"; // 密钥
- NSData *data=[self dataWithBase64EncodedString:str]; // base4解码
- char keyPtr[kCCKeySizeAES128 + ];
- memset(keyPtr, , sizeof(keyPtr));
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [data length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- voidvoid *buffer = malloc(bufferSize);
- size_t numBytesCrypted = ;
- CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
- kCCAlgorithmAES128,
- kCCOptionPKCS7Padding|kCCOptionECBMode,
- keyPtr,
- kCCBlockSizeAES128,
- nil,
- [data bytes],
- dataLength,
- buffer,
- bufferSize,
- &numBytesCrypted);
- if (cryptStatus == kCCSuccess) {
- NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
- NSString *result =[[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
- return result;
- }
- free(buffer);
- return str;
- }
- + (NSString *)base64StringFromText:(NSString *)text
- {
- if (text && ![text isEqualToString:LocalStr_None]) {
- NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
- return [self base64EncodedStringFrom:data];
- }
- else {
- return LocalStr_None;
- }
- }
- + (NSString *)textFromBase64String:(NSString *)base64
- {
- if (base64 && ![base64 isEqualToString:LocalStr_None]) {
- NSData *data = [self dataWithBase64EncodedString:base64];
- return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- }
- else {
- return LocalStr_None;
- }
- }
- + (NSData *)dataWithBase64EncodedString:(NSString *)string
- {
- if (string == nil)
- [NSException raise:NSInvalidArgumentException format:nil];
- if ([string length] == )
- return [NSData data];
- static charchar *decodingTable = NULL;
- if (decodingTable == NULL)
- {
- decodingTable = malloc();
- if (decodingTable == NULL)
- return nil;
- memset(decodingTable, CHAR_MAX, );
- NSUInteger i;
- for (i = ; i < ; i++)
- decodingTable[(short)encodingTable[i]] = i;
- }
- const charchar *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
- if (characters == NULL) // Not an ASCII string!
- return nil;
- charchar *bytes = malloc((([string length] + ) / ) * );
- if (bytes == NULL)
- return nil;
- NSUInteger length = ;
- NSUInteger i = ;
- while (YES)
- {
- char buffer[];
- short bufferLength;
- for (bufferLength = ; bufferLength < ; i++)
- {
- if (characters[i] == '\0')
- break;
- if (isspace(characters[i]) || characters[i] == '=')
- continue;
- buffer[bufferLength] = decodingTable[(short)characters[i]];
- if (buffer[bufferLength++] == CHAR_MAX) // Illegal character!
- {
- free(bytes);
- return nil;
- }
- }
- if (bufferLength == )
- break;
- if (bufferLength == ) // At least two characters are needed to produce one byte!
- {
- free(bytes);
- return nil;
- }
- // Decode the characters in the buffer to bytes.
- bytes[length++] = (buffer[] << ) | (buffer[] >> );
- if (bufferLength > )
- bytes[length++] = (buffer[] << ) | (buffer[] >> );
- if (bufferLength > )
- bytes[length++] = (buffer[] << ) | buffer[];
- }
- bytes = realloc(bytes, length);
- return [NSData dataWithBytesNoCopy:bytes length:length];
- }
- + (NSString *)base64EncodedStringFrom:(NSData *)data
- {
- if ([data length] == )
- return @"";
- charchar *characters = malloc((([data length] + ) / ) * );
- if (characters == NULL)
- return nil;
- NSUInteger length = ;
- NSUInteger i = ;
- while (i < [data length])
- {
- char buffer[] = {,,};
- short bufferLength = ;
- while (bufferLength < && i < [data length])
- buffer[bufferLength++] = ((charchar *)[data bytes])[i++];
- // Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
- characters[length++] = encodingTable[(buffer[] & 0xFC) >> ];
- characters[length++] = encodingTable[((buffer[] & 0x03) << ) | ((buffer[] & 0xF0) >> )];
- if (bufferLength > )
- characters[length++] = encodingTable[((buffer[] & 0x0F) << ) | ((buffer[] & 0xC0) >> )];
- else characters[length++] = '=';
- if (bufferLength > )
- characters[length++] = encodingTable[buffer[] & 0x3F];
- else characters[length++] = '=';
- }
- return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];
- }
- @end
Objective-C
java C# objective-c AES对称加解密的更多相关文章
- AES对称加解密
简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1. 摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- php des 对称加解密类
<?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...
- node.js 实现 AES CTR 加解密
node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...
- 最新版-Python和Java实现Aes相互加解密
前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...
- JAVA AES文件加解密
AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...
- Java拓展教程:文件DES加解密
Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...
- JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
终于有机会生产JAVA的东东了. 有点兴奋. 花了一天搞完.. java(关键key及算法有缩减): package com.security; import javax.crypto.Cipher; ...
随机推荐
- linux清理磁盘
https://blog.csdn.net/u012660464/article/details/78923011 有时候,服务突然挂了,再次启动却启动不了.一看,原来是磁盘空间被占满啦,那么,怎么清 ...
- ASP.NET OAuth 2.0 新手上路
OAuth2.0资料 初衷:一直想整理授权系列demo,让自己项目高端大尚,列出新手授权系列,帮助小白程序员不用在为授权头疼 OAuth 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服 ...
- Android 音频系统得框架
http://www.mamicode.com/info-detail-1790053.html http://blog.csdn.net/lushengchu_luis/article/detail ...
- ClamAV学习【7】——病毒库文件格式学习
搜查到一份详细的ClamAV病毒文件格式资料(http://download.csdn.net/detail/betabin/4215909),英文版,国内这资料不多的感觉. 重点看了下有关PE的病毒 ...
- NOIP2013PUZZLE
#include<cstdio> #include<cstring> #define MIN(A,B) (A)<(B)?(A):(B) using namespace s ...
- 一次mysql主从同步问题及解决过程
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 由于经常被抓取文章内容,在此附上博 ...
- datatime模块
https://www.cnblogs.com/cindy-cindy/p/6720196.html
- Linux磁盘及文件系统(一)
一.磁盘 1.IO接口类型 (1)传输类型分类 并口:同一个线缆可以接多块设备 IDE口:两个,一个主设备,一个从设备 SCSI:宽带:16-1:窄带:8-1 串口:同一个线缆只可以接一个设备 (2) ...
- 【Qt】Qt在Windows下的开发与调试环境配置
前文已经交待了从源码编译Qt自定义版本.现在可以开始配置一下开发与调试程序并写个Hello World了. 1. IDE 虽然Qt官方有VS插件使我们可以在VisualStudio中开发Qt应用,但我 ...
- kali系统越来越大解决
Kali Linux系统提供的apt-get方式,可以很好的安装软件,对系统进行更新.但是每次执行都会下载大量的软件包.这些软件包被安装后,并不会被自动删掉,会持续占用磁盘空间.解决这个问题有两个办法 ...