1.PHP[DesCryptUtil2.php]
* Created by PhpStorm.
* User: Alvin Tang
* Date: 2017/6/2
* Time: 10:03
* Author: 442353346@qq.com
* Desc: 16进制DES加密和解密*/
classDesCryptUtil2{//密钥8位
public $key = '|$|@d!@&';/**
* 构造函数
* DesCryptUtil2 constructor.
* @param string $key*/
function __construct($key = ''){$this->key = empty($key) ? $this->key : $key;
}/**
* @desc 加密返回十六进制字符串
* @param string $str
* @return string*/
public function encrypt($str) {$size = mcrypt_get_block_size (MCRYPT_DES,MCRYPT_MODE_CBC);$str = $this->pkcs5Pad($str, $size);return strtolower(bin2hex( mcrypt_encrypt(MCRYPT_DES, $this->key, $str, MCRYPT_MODE_CBC, $this->key)));
}/**
* @desc 解密
* @param string $str
* @return string*/
public function decrypt($str) {$strBin = $this->hex2bin(strtolower($str));$str = mcrypt_decrypt(MCRYPT_DES, $this->key, $strBin, MCRYPT_MODE_CBC, $this->key);$str = $this->pkcs5Unpad($str);return $str;
}/**
* @param $hexData
* @return string*/
public function hex2bin($hexData) {$binData = '';for($i = 0; $i < strlen ($hexData ); $i += 2) {$binData .= chr(hexdec(substr($hexData, $i, 2)));
}return $binData;
}/**
* @param $text
* @param $blocksize
* @return string*/
public function pkcs5Pad($text, $blocksize) {$pad = $blocksize - (strlen($text) % $blocksize);return $text . str_repeat(chr($pad), $pad);
}/**
* @param $text
* @return bool|string*/
public function pkcs5Unpad($text) {$pad = ord ($text{strlen($text) - 1});if ($pad > strlen($text)) {return false;
}if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {return false;
}return substr($text, 0, -1 * $pad);
}
}?>
2.JAVA[DES.java]
packageme.daei.soundmeter;/*** Created by Administrator on 2017/6/2.*/
importjavax.crypto.Cipher;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.SecretKey;importandroid.util.Base64;public classDES {/*** DES 加密
*@parammessage
*@paramkey
*@return*@throwsException*/
public static String encrypt(String message, String key) throwsException {
Cipher cipher= Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec= new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory= SecretKeyFactory.getInstance("DES");
SecretKey secretKey=keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv= new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);//return encodeBase64(cipher.doFinal(message.getBytes("UTF-8")));
return toHexString(cipher.doFinal(message.getBytes("UTF-8")));
}/*** DES解密
*@parammessage
*@paramkey
*@return*@throwsException*/
public static String decrypt(String message, String key) throwsException {//byte[] bytesrc = decodeBase64(message);
byte[] bytesrc =convertHexString(message);
Cipher cipher= Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec= new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory= SecretKeyFactory.getInstance("DES");
SecretKey secretKey=keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv= new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);byte[] retByte =cipher.doFinal(bytesrc);return newString(retByte);
}/*** 16进制字符串转为为字节数组
*@paramss
*@return
*/
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;
}returndigest;
}/*** 转化为16进制字符串
*@paramb
*@return
*/
public static String toHexString(byteb[]) {
StringBuffer hexString= newStringBuffer();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);
}returnhexString.toString();
}/*** BASE64编码
*@paramb
*@return
*/
public static String encodeBase64(byte[] b) {returnBase64.encodeToString(b, Base64.DEFAULT);
}/*** BASE64解码
*@parambase64String
*@return
*/
public static byte[] decodeBase64(String base64String) {returnBase64.decode(base64String, Base64.DEFAULT);
}
}
3.IOS[Object-C]
//
//ViewController.m//testObjectC//
//Created by TangPing on 2017/12/22.//Copyright © 2017年 TangPing. All rights reserved.//
#import "ViewController.h"
#import
#import
//如果需要base64请加载头文件//#import "Base64.h"
@interfaceViewController ()@end
@implementationViewController- (void)viewDidLoad {
[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.
NSString* key = @"|$%@d!@y";
NSString* test = @"123456";
NSString* result =[self encryptUseDES:test key:key];
NSLog(@"%@", result);
}//与下面的加密并未实现同步,如果有需要可自行实现十六进制转Byte算法
/*- (NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {
// 利用 GTMBase64 解碼 Base64 字串
NSData* cipherData = [cipherText base64DecodedData];//如果想与加密同步,请自行实现十六进制转Byte算法
unsigned char buffer[1024]; //注意空间大小
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
// IV 偏移量不需使用
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,//kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
[key UTF8String],//nil,
[cipherData bytes],
[cipherData length],
buffer,
1024, //注意空间大小
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
return plainText;
}*/
- (NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key
{
NSInteger bufferSize= 1024;
NSData*data =[clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
unsignedchar buffer[bufferSize]; //注意空间大小
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted= 0;
CCCryptorStatus cryptStatus=CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,//kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
[key UTF8String],//nil,
[data bytes],
[data length],
buffer,
bufferSize,//注意空间大小
&numBytesEncrypted);
NSString* plainText =nil;if (cryptStatus ==kCCSuccess) {
NSData*dataTemp =[NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];//转化为byte
Byte *byte = (Byte *)[dataTemp bytes];
NSUInteger len=[dataTemp length];
plainText= [self toHexString:bytesize:len];//plainText = [dataTemp base64EncodedString];
}else{//NSLog(@"DES加密失败");
}returnplainText;
}- (NSString *) toHexString:(Byte*)bytesize:(NSInteger)size {
NSMutableArray* tempArray =[NSMutableArray arrayWithCapacity:size];for(int i =0;i
NSString* newHexStr = [NSString stringWithFormat:@"%x",byte[i]&0xff];if(newHexStr.length < 2){
newHexStr= [@"0"stringByAppendingString:newHexStr];
}
[tempArray addObject:newHexStr];
}return [tempArray componentsJoinedByString:@""];
}@end
Base64.h
//
// Base64.h
// testObjectC
//
// Created by TangPing on 2018/1/5.
// Copyright © 2018年 TangPing. All rights reserved.
//
#ifndef Base64_h
#define Base64_h
#endif /* Base64_h */
#import
@interface NSData (Base64)
+ (NSData *)dataWithBase64EncodedString:(NSString *)string;
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth;
- (NSString *)base64EncodedString;
@end
@interface NSString (Base64)
+ (NSString *)stringWithBase64EncodedString:(NSString *)string;
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth;
- (NSString *)base64EncodedString;
- (NSString *)base64DecodedString;
- (NSData *)base64DecodedData;
@end
Base64.m
#import "Base64.h"
#pragma GCC diagnostic ignored "-Wselector"
#import
#if !__has_feature(objc_arc)
#error This library requires automatic reference counting
#endif
@implementation NSData (Base64)
+ (NSData *)dataWithBase64EncodedString:(NSString *)string
{
if (![string length]) return nil;
NSData *decoded = nil;
#if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_9 || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
if (![NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)])
{
decoded = [[self alloc] initWithBase64Encoding:[string stringByReplacingOccurrencesOfString:@"[^A-Za-z0-9+/=]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])]];
}
else
#endif
{
decoded = [[self alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters];
}
return [decoded length]? decoded: nil;
}
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth
{
if (![self length]) return nil;
NSString *encoded = nil;
#if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_9 || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
if (![NSData instancesRespondToSelector:@selector(base64EncodedStringWithOptions:)])
{
//encoded = [self base64Encoding];
encoded = [self base64EncodedString];
}
else
#endif
{
switch (wrapWidth)
{
case 64:
{
return [self base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
case 76:
{
return [self base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
}
default:
{
encoded = [self base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0];
}
}
}
if (!wrapWidth || wrapWidth >= [encoded length])
{
return encoded;
}
wrapWidth = (wrapWidth / 4) * 4;
NSMutableString *result = [NSMutableString string];
for (NSUInteger i = 0; i < [encoded length]; i+= wrapWidth)
{
if (i + wrapWidth >= [encoded length])
{
[result appendString:[encoded substringFromIndex:i]];
break;
}
[result appendString:[encoded substringWithRange:NSMakeRange(i, wrapWidth)]];
[result appendString:@"\r\n"];
}
return result;
}
- (NSString *)base64EncodedString
{
return [self base64EncodedStringWithWrapWidth:0];
}
@end
@implementation NSString (Base64)
+ (NSString *)stringWithBase64EncodedString:(NSString *)string
{
NSData *data = [NSData dataWithBase64EncodedString:string];
if (data)
{
return [[self alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
return nil;
}
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth
{
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
return [data base64EncodedStringWithWrapWidth:wrapWidth];
}
- (NSString *)base64EncodedString
{
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
return [data base64EncodedString];
}
- (NSString *)base64DecodedString
{
return [NSString stringWithBase64EncodedString:self];
}
- (NSData *)base64DecodedData
{
return [NSData dataWithBase64EncodedString:self];
}
@end