首先是JAVA端的加密工具类,它同样适用于Android端,无需任何修改,即可保证Java与Android端的加解密一致,并且中文不会乱码。

package paladinSocket.paladin.Netty;import java.security.Key;import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;public class AES {// 密钥  private final static String secretKey = "c07fa279125c0c566c851df61ae2d55e" ;  // 向量  private final static String iv = "01234567" ;  // 加解密统一使用的编码方式  private final static String encoding = "utf-8" ;  /** * 3DES加密 *  * @param plainText 普通文本 * @return * @throws Exception  */ public static String encode(String plainText) throws Exception {  Key deskey = null ;  DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());  SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );  deskey = keyfactory.generateSecret(spec);  Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );  IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);  System.out.println("加密前的data:"+parseByte2HexStr(plainText.getBytes(encoding)));byte [] encryptData = cipher.doFinal(plainText.getBytes(encoding));  System.out.println("加密后的data"+parseByte2HexStr(encryptData));return Base64.encode(encryptData);  }  /** * 3DES解密 *  * @param encryptText 加密文本 * @return * @throws Exception */ public static String decode(String encryptText) throws Exception {  Key deskey = null ;  DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());  SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );  deskey = keyfactory.generateSecret(spec);  Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );  IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  cipher.init(Cipher.DECRYPT_MODE, deskey, ips);  byte [] decryptData = cipher.doFinal(Base64.decode(encryptText));  System.out.println("解密后的data:"+parseByte2HexStr(decryptData));return new String(decryptData, encoding);  }  /**将二进制转换成16进制 * @param buf * @return */  public static String parseByte2HexStr(byte buf[]) {  StringBuffer sb = new StringBuffer();  for (int i = 0; i < buf.length; i++) {  String hex = Integer.toHexString(buf[i] & 0xFF);  if (hex.length() == 1) {  hex = '0' + hex;  }  sb.append(hex.toUpperCase());  }  return sb.toString();  }  public static void main(String[] args) throws Exception {String result = encode("xiguzhineng");System.out.println("加密后的数据:"+result);String jiemi = decode(result);System.out.println("解密后的数据:"+jiemi);}
}

上面的加密工具类会使用到Base64这个类,该类的源代码如下:

package paladinSocket.paladin.Netty;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class Base64 {private static final char [] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" .toCharArray();  public static String encode( byte [] data) {  int start = 0 ;  int len = data.length;  StringBuffer buf = new StringBuffer(data.length * 3 / 2 );  int end = len - 3 ;  int i = start;  int n = 0 ;  while (i <= end) {  int d = (((( int ) data[i]) & 0x0ff ) << 16 ) | (((( int ) data[i + 1 ]) & 0x0ff ) << 8 ) | ((( int ) data[i + 2 ]) & 0x0ff );  buf.append(legalChars[(d >> 18 ) & 63 ]);  buf.append(legalChars[(d >> 12 ) & 63 ]);  buf.append(legalChars[(d >> 6 ) & 63 ]);  buf.append(legalChars[d & 63 ]);  i += 3 ;  if (n++ >= 14 ) {  n = 0 ;  buf.append( " " );  }  }  if (i == start + len - 2 ) {  int d = (((( int ) data[i]) & 0x0ff ) << 16 ) | (((( int ) data[i + 1 ]) & 255 ) << 8 );  buf.append(legalChars[(d >> 18 ) & 63 ]);  buf.append(legalChars[(d >> 12 ) & 63 ]);  buf.append(legalChars[(d >> 6 ) & 63 ]);  buf.append( "=" );  } else if (i == start + len - 1 ) {  int d = ((( int ) data[i]) & 0x0ff ) << 16 ;  buf.append(legalChars[(d >> 18 ) & 63 ]);  buf.append(legalChars[(d >> 12 ) & 63 ]);  buf.append( "==" );  }  return buf.toString();  }  private static int decode( char c) {  if (c >= 'A' && c <= 'Z' )  return (( int ) c) - 65 ;  else if (c >= 'a' && c <= 'z' )  return (( int ) c) - 97 + 26 ;  else if (c >= '0' && c <= '9' )  return (( int ) c) - 48 + 26 + 26 ;  else switch (c) {  case '+' :  return 62 ;  case '/' :  return 63 ;  case '=' :  return 0 ;  default :  throw new RuntimeException( "unexpected code: " + c);  }  }  /** * Decodes the given Base64 encoded String to a new byte array. The byte array holding the decoded data is returned. */ public static byte [] decode(String s) {  ByteArrayOutputStream bos = new ByteArrayOutputStream();  try {  decode(s, bos);  } catch (IOException e) {  throw new RuntimeException();  }  byte [] decodedBytes = bos.toByteArray();  try {  bos.close();  bos = null ;  } catch (IOException ex) {  System.err.println( "Error while decoding BASE64: " + ex.toString());  }  return decodedBytes;  }  private static void decode(String s, OutputStream os) throws IOException {  int i = 0 ;  int len = s.length();  while ( true ) {  while (i < len && s.charAt(i) <= ' ' )  i++;  if (i == len)  break ;  int tri = (decode(s.charAt(i)) << 18 ) + (decode(s.charAt(i + 1 )) << 12 ) + (decode(s.charAt(i + 2 )) << 6 ) + (decode(s.charAt(i + 3 )));  os.write((tri >> 16 ) & 255 );  if (s.charAt(i + 2 ) == '=' )  break ;  os.write((tri >> 8 ) & 255 );  if (s.charAt(i + 3 ) == '=' )  break ;  os.write(tri & 255 );  i += 4 ;  }  }
}

接下来是iPhone端的加密程序,当然是用Ojbective-C写的3DES加密程序,源代码如下:

#import <Foundation/Foundation.h>  @interface DES3Util : NSObject {  }  // 加密方法
+ (NSString*)encrypt:(NSString*)plainText;  // 解密方法
+ (NSString*)decrypt:(NSString*)encryptText;  @end 
#import "DES3Util.h"
#import <CommonCrypto/CommonCryptor.h>
#import "GTMBase64.h"  #define gkey            @"liuyunqiang@lx100$#365#$"
#define gIv             @"01234567"  @implementation DES3Util  // 加密方法
+ (NSString*)encrypt:(NSString*)plainText {  NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];  size_t plainTextBufferSize = [data length];  const void *vplainText = (const void *)[data bytes];  CCCryptorStatus ccStatus;  uint8_t *bufferPtr = NULL;  size_t bufferPtrSize = 0;  size_t movedBytes = 0;  bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  memset((void *)bufferPtr, 0x0, bufferPtrSize);  const void *vkey = (const void *) [gkey UTF8String];  const void *vinitVec = (const void *) [gIv UTF8String];  ccStatus = CCCrypt(kCCEncrypt,  kCCAlgorithm3DES,  kCCOptionPKCS7Padding,  vkey,  kCCKeySize3DES,  vinitVec,  vplainText,  plainTextBufferSize,  (void *)bufferPtr,  bufferPtrSize,  &movedBytes);  NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];  NSString *result = [GTMBase64 stringByEncodingData:myData];  return result;
}  // 解密方法
+ (NSString*)decrypt:(NSString*)encryptText {  NSData *encryptData = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];  size_t plainTextBufferSize = [encryptData length];  const void *vplainText = [encryptData bytes];  CCCryptorStatus ccStatus;  uint8_t *bufferPtr = NULL;  size_t bufferPtrSize = 0;  size_t movedBytes = 0;  bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  memset((void *)bufferPtr, 0x0, bufferPtrSize);  const void *vkey = (const void *) [gkey UTF8String];  const void *vinitVec = (const void *) [gIv UTF8String];  ccStatus = CCCrypt(kCCDecrypt,  kCCAlgorithm3DES,  kCCOptionPKCS7Padding,  vkey,  kCCKeySize3DES,  vinitVec,  vplainText,  plainTextBufferSize,  (void *)bufferPtr,  bufferPtrSize,  &movedBytes);  NSString *result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr   length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding] autorelease];  return result;
}  @end 

iPhone端的加密工具类中引入了“GTMBase64.h”,这是iOS平台的Base64编码工具类。

DES加密解密base64转码和iphone平台一致结果相关推荐

  1. pythondes加密盒子_PYTHON实现DES加密及base64源码

    要求是实现DES加密,解密,我是用python实现的,还是有挺多坑的,改bug就改了挺久,加密实现后,解密过程就比较轻松. 另外,附加base64编码源码 要求:输入秘钥为64位二进制数(有效位为56 ...

  2. 前端DES加密、base64编码,后端DES解密、base64解码

    项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...

  3. DES加密解密与AES加密解密

    × 目录 [1]AES加密算法和DES加密算法的效率比较 [2]AES和DES加密解密代码 随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了 ...

  4. DES加密解密算法(前端后端)

    DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114  原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...

  5. php ecb加密,PHP之DES加密解密算法类(ECB模式)(实例教程)

    PHP中加密解密函数与DES加密解密的应用实例:<?php define('SMS_KEY', 'K0e5293b'); class DesUtil{ public function encry ...

  6. DES加密解密kotlin版

    DES加密解密kotlin版 kotlin版本的DES加密和解密代码 话不多说直接上代码 kotlin版本的DES加密和解密代码 需要注意中文加密后会乱码所以需要用Base64解码 直接用java8的 ...

  7. Java DES 加密解密

    1.加密的相关概念 1.明文:被隐蔽的消息称作明文(plaintext) 2.密文:隐蔽后的消息称作密文(ciphertext) 3.加密:将明文变换成密文的过程称作加密(encryption) 4. ...

  8. C# DES加密解密算法

    C# DES加密解密算法 #region DES Class /// <summary> /// ClassName: DES 加密类 /// DES加密.解密类库,字符串加密结果使用BA ...

  9. php与java的des加密解密

    与第三方接口对接des加密.解密,第三方提供java的des加密解密demo,特记录PHP与java加密解密. import javax.crypto.*; import javax.crypto.s ...

  10. C#常用加密解密方法(DES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

最新文章

  1. oracle sys改密码,Oracle修改SYS密码
  2. How is syntax error in Vue detected
  3. 【联盛德W806上手笔记】一、开发环境和烧录程序
  4. PosgreSQL快速参数调优和sysbench压测
  5. 如何在一个月内让QQ农场冲上40级
  6. 6.3 探索性空间数据分析
  7. 中国国产十大著名户外运动品牌全球最顶级碳纤维自行车品牌排行榜
  8. 【从零开始的SDN学习之路】之闲话Neutron与SDN的联系
  9. 创新指南|如何以STEPPS模型6招打造病毒式传播产品
  10. PPT幻灯片放映不显示备注,只让备注显示在自己屏幕上
  11. 国企数字化转型主要工作
  12. 电商秒杀系统设计分析
  13. 浅谈:基于物联网的固定资产管理技术
  14. pgsql(PostgreSQL)常用命令行操作
  15. 代码管理(git)及代码规范
  16. 【千呼万唤】李宏毅《机器学习》国语课程(2022)终于来了
  17. 作为一个J2EE软件攻城师
  18. android中进程和线程的关系与区别
  19. lisp填挖横断面提取_CASS横断面提取程序,望大侠们改善改善
  20. 【论文学习】ASVspoof 2015 the First Automatic Speaker Verification Spoofing and Countermeasures Challenge

热门文章

  1. Same Parity Summands
  2. actionbar左上角的返回小图标
  3. SpringCloudGateway原理——Gateway集成eureka服务发现转发请求
  4. java中什么是线程不安全给出一个例子
  5. 在centos下安装pycrypto报错 RuntimeError: autoconf error
  6. MySql:学生表、教师表、课程表、分数表 练习
  7. POJ 1198 / HDU 1401 Solitaire (记忆化搜索+meet in middle)
  8. 橡胶材料特性和本构关系【转】_51CAE_新浪博客
  9. 香港 “一卡通”業務收費表
  10. java注册用户_用java编程实现用户注册并进行登录操作