在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Android实现 package com.sto.express.utils; import java.security.MessageDigest; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; /** * Des 加密 * * @author qulixuan * 2018-1-18 20:42:41 * Created by Administrator on 2017-09-22. */ public class AlgorithmUtil { private static final String ALGORITHM = "AES"; private static final String TSFMN = "DES/CBC/PKCS5Padding"; private static AlgorithmParameterSpec iv = null; public AlgorithmUtil() { } //加密 public static String encrypt(String message, String key) throws Exception { // 加密key String firstKey = MD5Utils.digest(key).substring(0, 8).toUpperCase(); String sha1 = getSha1(firstKey); sha1 = sha1.substring(0, 8).toUpperCase(); byte[] bytes = sha1.getBytes(); //加密iv String temp1 = MD5Utils.digest(key).substring(0, 8).toUpperCase(); String upperCase = MD5Utils.digest(temp1).toUpperCase().substring(0, 8); byte[] bytes2 = upperCase.getBytes("ASCII"); // UnsignedBytes Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(bytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); IvParameterSpec iv = new IvParameterSpec(bytes2); cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); byte[] bytes1 = cipher.doFinal(message.getBytes("UTF-8")); String a = toHexString(bytes1).toUpperCase(); return a; } // 解密数据 public static String decrypt(String message, String key) throws Exception { // 加密key String firstKey = MD5Utils.digest(key).substring(0, 8).toUpperCase(); String sha1 = getSha1(firstKey); sha1 = sha1.substring(0, 8).toUpperCase(); byte[] bytes = sha1.getBytes(); //加密iv String temp1 = MD5Utils.digest(key).substring(0, 8).toUpperCase(); String upperCase = MD5Utils.digest(temp1).toUpperCase().substring(0, 8); byte[] bytes2 = upperCase.getBytes(); byte[] bytesrc =convertHexString(message); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(bytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); IvParameterSpec iv = new IvParameterSpec(bytes2); cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); byte[] retByte = cipher.doFinal(bytesrc); return new String(retByte,"GBK"); } // int转byte public static byte[] intToBytes(int value) { byte[] des = new byte[4]; des[0] = (byte) (value & 0xff); // 低位(右边)的8个bit位 des[1] = (byte) ((value >> 8) & 0xff); //第二个8 bit位 des[2] = (byte) ((value >> 16) & 0xff); //第三个 8 bit位 /** * (byte)((value >> 24) & 0xFF); * value向右移动24位, 然后和0xFF也就是(11111111)进行与运算 * 在内存中生成一个与 value 同类型的值 * 然后把这个值强制转换成byte类型, 再赋值给一个byte类型的变量 des[3] */ des[3] = (byte) ((value >> 24) & 0xff); //第4个 8 bit位 return des; } public static byte[] convertHexString(String ss) { byte digest[] = new byte[ss.length() / 2]; for (int i = 0; i < digest.length; i++) { String byteString = ss.substring(2 * i, 2 * i + 2); int byteValue = Integer.parseInt(byteString, 16); digest[i] = (byte)byteValue; } return digest; } public static String toHexString(byte b[]) { StringBuffer hexString = new StringBuffer(); for (int i = 0; i < b.length; i++) { String plainText = Integer.toHexString(0xff & b[i]); if (plainText.length() < 2) plainText = "0" + plainText; hexString.append(plainText); } return hexString.toString(); } public static String getSha1(String str) { if (null == str || 0 == str.length()) { return null; } char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (Exception e) { e.printStackTrace(); } return null; } } IOS实现 CocoaSecurity.h /* CocoaSecurity 1.1 Created by Kelp on 12/5/12. Copyright (c) 2012 Kelp http://kelp.phate.org/ MIT License CocoaSecurity is core. It provides AES encrypt, AES decrypt, Hash(MD5, HmacMD5, SHA1~SHA512, HmacSHA1~HmacSHA512) messages. */ #import <Foundation/Foundation.h> #import <Foundation/NSException.h> #pragma mark - CocoaSecurityResult @interface CocoaSecurityResult : NSObject @property (strong, nonatomic, readonly) NSData *data; @property (strong, nonatomic, readonly) NSString *utf8String; @property (strong, nonatomic, readonly) NSString *hex; @property (strong, nonatomic, readonly) NSString *hexLower; @property (strong, nonatomic, readonly) NSString *base64; - (id)initWithBytes:(unsigned char[])initData length:(NSUInteger)length; @end #pragma mark - CocoaSecurity @interface CocoaSecurity : NSObject #pragma mark - AES Encrypt + (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSString *)key; + (CocoaSecurityResult *)aesEncrypt:(NSString *)data hexKey:(NSString *)key hexIv:(NSString *)iv; + (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSData *)key iv:(NSData *)iv; + (CocoaSecurityResult *)aesEncryptWithData:(NSData *)data key:(NSData *)key iv:(NSData *)iv; #pragma mark AES Decrypt + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data key:(NSString *)key; + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data hexKey:(NSString *)key hexIv:(NSString *)iv; + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data key:(NSData *)key iv:(NSData *)iv; + (CocoaSecurityResult *)aesDecryptWithData:(NSData *)data key:(NSData *)key iv:(NSData *)iv; #pragma mark - MD5 + (CocoaSecurityResult *)md5:(NSString *)hashString; + (CocoaSecurityResult *)md5WithData:(NSData *)hashData; #pragma mark HMAC-MD5 + (CocoaSecurityResult *)hmacMd5:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacMd5WithData:(NSData *)hashData hmacKey:(NSString *)key; #pragma mark - SHA + (CocoaSecurityResult *)sha1:(NSString *)hashString; + (CocoaSecurityResult *)sha1WithData:(NSData *)hashData; + (CocoaSecurityResult *)sha224:(NSString *)hashString; + (CocoaSecurityResult *)sha224WithData:(NSData *)hashData; + (CocoaSecurityResult *)sha256:(NSString *)hashString; + (CocoaSecurityResult *)sha256WithData:(NSData *)hashData; + (CocoaSecurityResult *)sha384:(NSString *)hashString; + (CocoaSecurityResult *)sha384WithData:(NSData *)hashData; + (CocoaSecurityResult *)sha512:(NSString *)hashString; + (CocoaSecurityResult *)sha512WithData:(NSData *)hashData; #pragma mark HMAC-SHA + (CocoaSecurityResult *)hmacSha1:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha1WithData:(NSData *)hashData hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha224:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha224WithData:(NSData *)hashData hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha256:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha256WithData:(NSData *)hashData hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha384:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha384WithData:(NSData *)hashData hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha512:(NSString *)hashString hmacKey:(NSString *)key; + (CocoaSecurityResult *)hmacSha512WithData:(NSData *)hashData hmacKey:(NSString *)key; @end #pragma mark - CocoaSecurityEncoder @interface CocoaSecurityEncoder : NSObject - (NSString *)base64:(NSData *)data; - (NSString *)hex:(NSData *)data useLower:(BOOL)isOutputLower; @end #pragma mark - CocoaSecurityDecoder @interface CocoaSecurityDecoder : NSObject - (NSData *)base64:(NSString *)data; - (NSData *)hex:(NSString *)data; @end CocoaSecurity.m // // CocoaSecurity.m // // Created by Kelp on 12/5/12. // Copyright (c) 2012 Kelp http://kelp.phate.org/ // MIT License // #import "CocoaSecurity.h" #import <CommonCrypto/CommonHMAC.h> #import <CommonCrypto/CommonCryptor.h> #import "Base64.h" #pragma mark - CocoaSecurity @implementation CocoaSecurity #pragma mark - AES Encrypt // default AES Encrypt, key -> SHA384(key).sub(0, 32), iv -> SHA384(key).sub(32, 16) + (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSString *)key { CocoaSecurityResult * sha = [self sha384:key]; NSData *aesKey = [sha.data subdataWithRange:NSMakeRange(0, 32)]; NSData *aesIv = [sha.data subdataWithRange:NSMakeRange(32, 16)]; return [self aesEncrypt:data key:aesKey iv:aesIv]; } #pragma mark AES Encrypt 128, 192, 256 + (CocoaSecurityResult *)aesEncrypt:(NSString *)data hexKey:(NSString *)key hexIv:(NSString *)iv { CocoaSecurityDecoder *decoder = [CocoaSecurityDecoder new]; NSData *aesKey = [decoder hex:key]; NSData *aesIv = [decoder hex:iv]; return [self aesEncrypt:data key:aesKey iv:aesIv]; } + (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSData *)key iv:(NSData *)iv { return [self aesEncryptWithData:[data dataUsingEncoding:NSUTF8StringEncoding] key:key iv:iv]; } + (CocoaSecurityResult *)aesEncryptWithData:(NSData *)data key:(NSData *)key iv:(NSData *)iv { // check length of key and iv if ([iv length] != 16) { @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Length of iv is wrong. Length of iv should be 16(128bits)" userInfo:nil]; } if ([key length] != 16 && [key length] != 24 && [key length] != 32 ) { @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Length of key is wrong. Length of iv should be 16, 24 or 32(128, 192 or 256bits)" userInfo:nil]; } // setup output buffer size_t bufferSize = [data length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); // do encrypt size_t encryptedSize = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, [key bytes], // Key [key length], // kCCKeySizeAES [iv bytes], // IV [data bytes], [data length], buffer, bufferSize, &encryptedSize); if (cryptStatus == kCCSuccess) { CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:buffer length:encryptedSize]; free(buffer); return result; } else { free(buffer); @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Encrypt Error!" userInfo:nil]; return nil; } } #pragma mark - AES Decrypt // default AES Decrypt, key -> SHA384(key).sub(0, 32), iv -> SHA384(key).sub(32, 16) + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data key:(NSString *)key { CocoaSecurityResult * sha = [self sha384:key]; NSData *aesKey = [sha.data subdataWithRange:NSMakeRange(0, 32)]; NSData *aesIv = [sha.data subdataWithRange:NSMakeRange(32, 16)]; return [self aesDecryptWithBase64:data key:aesKey iv:aesIv]; } #pragma mark AES Decrypt 128, 192, 256 + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data hexKey:(NSString *)key hexIv:(NSString *)iv { CocoaSecurityDecoder *decoder = [CocoaSecurityDecoder new]; NSData *aesKey = [decoder hex:key]; NSData *aesIv = [decoder hex:iv]; return [self aesDecryptWithBase64:data key:aesKey iv:aesIv]; } + (CocoaSecurityResult *)aesDecryptWithBase64:(NSString *)data key:(NSData *)key iv:(NSData *)iv { CocoaSecurityDecoder *decoder = [CocoaSecurityDecoder new]; return [self aesDecryptWithData:[decoder base64:data] key:key iv:iv]; } + (CocoaSecurityResult *)aesDecryptWithData:(NSData *)data key:(NSData *)key iv:(NSData *)iv { // check length of key and iv if ([iv length] != 16) { @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Length of iv is wrong. Length of iv should be 16(128bits)" userInfo:nil]; } if ([key length] != 16 && [key length] != 24 && [key length] != 32 ) { @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Length of key is wrong. Length of iv should be 16, 24 or 32(128, 192 or 256bits)" userInfo:nil]; } // setup output buffer size_t bufferSize = [data length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); // do encrypt size_t encryptedSize = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, [key bytes], // Key [key length], // kCCKeySizeAES [iv bytes], // IV [data bytes], [data length], buffer, bufferSize, &encryptedSize); if (cryptStatus == kCCSuccess) { CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:buffer length:encryptedSize]; free(buffer); return result; } else { free(buffer); @throw [NSException exceptionWithName:@"Cocoa Security" reason:@"Decrypt Error!" userInfo:nil]; return nil; } } #pragma mark - MD5 + (CocoaSecurityResult *)md5:(NSString *)hashString { return [self md5WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)md5WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_MD5_DIGEST_LENGTH); CC_MD5([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_MD5_DIGEST_LENGTH]; free(digest); return result; } #pragma mark - HMAC-MD5 + (CocoaSecurityResult *)hmacMd5:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacMd5WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacMd5WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_MD5_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgMD5, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_MD5_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } #pragma mark - SHA1 + (CocoaSecurityResult *)sha1:(NSString *)hashString { return [self sha1WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)sha1WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_SHA1_DIGEST_LENGTH); CC_SHA1([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; free(digest); return result; } #pragma mark SHA224 + (CocoaSecurityResult *)sha224:(NSString *)hashString { return [self sha224WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)sha224WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_SHA224_DIGEST_LENGTH); CC_SHA224([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA224_DIGEST_LENGTH]; free(digest); return result; } #pragma mark SHA256 + (CocoaSecurityResult *)sha256:(NSString *)hashString { return [self sha256WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)sha256WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_SHA256_DIGEST_LENGTH); CC_SHA256([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; free(digest); return result; } #pragma mark SHA384 + (CocoaSecurityResult *)sha384:(NSString *)hashString { return [self sha384WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)sha384WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_SHA384_DIGEST_LENGTH); CC_SHA384([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA384_DIGEST_LENGTH]; free(digest); return result; } #pragma mark SHA512 + (CocoaSecurityResult *)sha512:(NSString *)hashString { return [self sha512WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding]]; } + (CocoaSecurityResult *)sha512WithData:(NSData *)hashData { unsigned char *digest; digest = malloc(CC_SHA512_DIGEST_LENGTH); CC_SHA512([hashData bytes], (CC_LONG)[hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA512_DIGEST_LENGTH]; free(digest); return result; } #pragma mark - HMAC-SHA1 + (CocoaSecurityResult *)hmacSha1:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacSha1WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacSha1WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_SHA1_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } #pragma mark HMAC-SHA224 + (CocoaSecurityResult *)hmacSha224:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacSha224WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacSha224WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_SHA224_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgSHA224, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA224_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } #pragma mark HMAC-SHA256 + (CocoaSecurityResult *)hmacSha256:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacSha256WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacSha256WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_SHA256_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } #pragma mark HMAC-SHA384 + (CocoaSecurityResult *)hmacSha384:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacSha384WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacSha384WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_SHA384_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgSHA384, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA384_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } #pragma mark HMAC-SHA512 + (CocoaSecurityResult *)hmacSha512:(NSString *)hashString hmacKey:(NSString *)key { return [self hmacSha512WithData:[hashString dataUsingEncoding:NSUTF8StringEncoding] hmacKey:key]; } + (CocoaSecurityResult *)hmacSha512WithData:(NSData *)hashData hmacKey:(NSString *)key { unsigned char *digest; digest = malloc(CC_SHA512_DIGEST_LENGTH); const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; CCHmac(kCCHmacAlgSHA512, cKey, strlen(cKey), [hashData bytes], [hashData length], digest); CocoaSecurityResult *result = [[CocoaSecurityResult alloc] initWithBytes:digest length:CC_SHA512_DIGEST_LENGTH]; free(digest); cKey = nil; return result; } @end #pragma mark - CocoaSecurityResult @implementation CocoaSecurityResult @synthesize data = _data; #pragma mark - Init - (id)initWithBytes:(unsigned char[])initData length:(NSUInteger)length { self = [super init]; if (self) { _data = [NSData dataWithBytes:initData length:length]; } return self; } #pragma mark UTF8 String // convert CocoaSecurityResult to UTF8 string - (NSString *)utf8String { NSString *result = [[NSString alloc] initWithData:_data encoding:NSUTF8StringEncoding]; return result; } #pragma mark HEX // convert CocoaSecurityResult to HEX string - (NSString *)hex { CocoaSecurityEncoder *encoder = [CocoaSecurityEncoder new]; return [encoder hex:_data useLower:false]; } - (NSString *)hexLower { CocoaSecurityEncoder *encoder = [CocoaSecurityEncoder new]; return [encoder hex:_data useLower:true]; } #pragma mark Base64 // convert CocoaSecurityResult to Base64 string - (NSString *)base64 { CocoaSecurityEncoder *encoder = [CocoaSecurityEncoder new]; return [encoder base64:_data]; } @end #pragma mark - CocoaSecurityEncoder @implementation CocoaSecurityEncoder // convert NSData to Base64 - (NSString *)base64:(NSData *)data { return [data base64EncodedString]; } // convert NSData to hex string - (NSString *)hex:(NSData *)data useLower:(BOOL)isOutputLower { if (data.length == 0) { return nil; } static const char HexEncodeCharsLower[] = "0123456789abcdef"; static const char HexEncodeChars[] = "0123456789ABCDEF"; char *resultData; // malloc result data resultData = malloc([data length] * 2 +1); // convert imgData(NSData) to char[] unsigned char *sourceData = ((unsigned char *)[data bytes]); NSUInteger length = [data length]; if (isOutputLower) { for (NSUInteger index = 0; index < length; index++) { // set result data resultData[index * 2] = HexEncodeCharsLower[(sourceData[index] >> 4)]; resultData[index * 2 + 1] = HexEncodeCharsLower[(sourceData[index] % 0x10)]; } } else { for (NSUInteger index = 0; index < length; index++) { // set result data resultData[index * 2] = HexEncodeChars[(sourceData[index] >> 4)]; resultData[index * 2 + 1] = HexEncodeChars[(sourceData[index] % 0x10)]; } } resultData[[data length] * 2] = 0; // convert result(char[]) to NSString NSString *result = [NSString stringWithCString:resultData encoding:NSASCIIStringEncoding]; sourceData = nil; free(resultData); return result; } @end #pragma mark - CocoaSecurityDecoder @implementation CocoaSecurityDecoder - (NSData *)base64:(NSString *)string { return [NSData dataWithBase64EncodedString:string]; } - (NSData *)hex:(NSString *)data { if (data.length == 0) { return nil; } static const unsigned char HexDecodeChars[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, < |
请发表评论