首页

文章

iOS想PHP服务端传数据,怎么加密好

发布网友 发布时间:2022-04-19 12:51

我来回答

1个回答

热心网友 时间:2023-06-30 03:06

  IOS:引入ios自带库 #include
  
  先以DES加密算法为例讲解,DES的加密和解密都同用一个Key,下面两个加解密函数如下:
  //加密
  -(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key
  {
  //一般对加密的字符串采用UTF-8编码 NSData存储的就是二进制数据
  NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
  //See the doc: For block ciphers, the output size will always be less than or
  //equal to the input size plus the size of one block.
  //确定加密过后的字符串在内存中存放的大小,根据文档,对于块密码方式(这个库还包括流密码方式)
  //加密过后的字符串大小总是小于或等于加密之前数据的大小加上对应加密算法的块大小
  //但看到一些大牛还这样一下 & ~(kCCBlockSizeDES - 1) 目前不知道为嘛
  size_t bufferSize = ([data length] + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
  //void *buffer = malloc(bufferSize);//可以手动创建buffer,但之后要记得free掉
  unsigned char buffer[bufferSize]; //定义输出加密串所占内存空间
  memset(buffer, 0, sizeof(char)); //采用ios中宏定义好的方法分配空间,可免去手动free
  size_t numBytesEncrypted = 0; //输出加密串的字节数
  
  //加密数据,采用库中的CCCrypt方法,这个方法会按次序执行CCCrytorCreate(),
  // CCCryptorUpdate(), CCCryptorFinal(), and CCCryptorRelease() 如果开发者自己create这个对象,
  //那么后面就必须执行final、release之类的函数,CCCrypt方法一次性解决

  // Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
  //Byte iv[] = {1,2,3,4,5,6,7,8}; 加密所需的随机字符
  CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, //加密方式,kCCEncrypt加密 kCCDecrypt解密
  kCCAlgorithmDES, //采用的加密算法,内置包含AES、DES、
  //3DES、其他还有四个,不知道是什么
  //后续讨论
  //加密额外参数,注意此处各个平台之间指定的时候要记得一样
  kCCOptionPKCS7Padding | kCCOptionECBMode,
  [key UTF8String], //加密密匙 UTF8的字符串
  kCCKeySizeDES, //密匙长度字节 各算法有对应的长度宏
  nil, //随机字符,可指定也可不指定,各平台之间不绝对
  [data bytes], //待加密串的字节长度
  [data length], //待加密串的长度
  buffer, //输出已加密串的内存地址
  bufferSize, //已加密串的大小
  &numBytesEncrypted);
  
  NSString* plainText = nil;
  if (cryptStatus == kCCSuccess) {
  NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
  plainText = [GTMBase64 stringByEncodingData:dataTemp];
  }else{
  NSLog(@"DES加密失败");
  }
  return plainText;
  }

  //解密
  -(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {
  // 利用 GTMBase64 解码 Base64 字串
  NSData* cipherData = [GTMBase64 decodeString:cipherText];
  size_t bufferSize = ([cipherData length] + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
  //unsigned char buffer[1024];
  unsigned char buffer[bufferSize];
  memset(buffer, 0, sizeof(char));
  size_t numBytesDecrypted = 0;
  
  // IV 偏移量不需使用
  CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
  kCCAlgorithmDES,
  kCCOptionPKCS7Padding | kCCOptionECBMode,
  [key UTF8String],
  kCCKeySizeDES,
  nil,
  [cipherData bytes],
  [cipherData length],
  buffer,
  bufferSize,//1024,
  &numBytesDecrypted);
  NSString* plainText = nil;
  if (cryptStatus == kCCSuccess) {
  NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
  plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
  }
  return plainText;
  }

  java和php平台的代码实现:

  Java代码 收藏代码
  import java.io.IOException;
  import java.security.SecureRandom;
  import javax.crypto.Cipher;
  import javax.crypto.SecretKey;
  import javax.crypto.SecretKeyFactory;
  import javax.crypto.spec.DESKeySpec;
  import sun.misc.BASE64Decoder;
  import sun.misc.BASE64Encoder;
  public class DES {
  
  private byte[] desKey;
  
  public DES(String desKey) {
  this.desKey = desKey.getBytes();
  }
  
  public byte[] desEncrypt(byte[] plainText) throws Exception {
  SecureRandom sr = new SecureRandom();
  byte rawKeyData[] = desKey;
  DESKeySpec dks = new DESKeySpec(rawKeyData);
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  SecretKey key = keyFactory.generateSecret(dks);
  Cipher cipher = Cipher.getInstance("DES");
  cipher.init(Cipher.ENCRYPT_MODE, key, sr);
  byte data[] = plainText;
  byte encryptedData[] = cipher.doFinal(data);
  return encryptedData;
  }
  
  public byte[] desDecrypt(byte[] encryptText) throws Exception {
  SecureRandom sr = new SecureRandom();
  byte rawKeyData[] = desKey;
  DESKeySpec dks = new DESKeySpec(rawKeyData);
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  SecretKey key = keyFactory.generateSecret(dks);
  Cipher cipher = Cipher.getInstance("DES");
  cipher.init(Cipher.DECRYPT_MODE, key, sr);
  byte encryptedData[] = encryptText;
  byte decryptedData[] = cipher.doFinal(encryptedData);
  return decryptedData;
  }
  
  public String encrypt(String input) throws Exception {
  return base64Encode(desEncrypt(input.getBytes()));
  }
  
  public String decrypt(String input) throws Exception {
  byte[] result = base64Decode(input);
  return new String(desDecrypt(result));
  }
  
  public static String base64Encode(byte[] s) {
  if (s == null)
  return null;
  BASE64Encoder b = new sun.misc.BASE64Encoder();
  return b.encode(s);
  }
  
  public static byte[] base64Decode(String s) throws IOException {
  if (s == null)
  return null;
  BASE64Decoder decoder = new BASE64Decoder();
  byte[] b = decoder.decodeBuffer(s);
  return b;
  }
  
  public static void main(String[] args) throws Exception {
  String key = "abcdefgh";
  String input = "a";
  DES crypt = new DES(key);
  System.out.println("Encode:" + crypt.encrypt(input));
  System.out.println("Decode:" + crypt.decrypt(crypt.encrypt(input)));
  }
  }

  php 方法一
  Php代码 收藏代码
  <?php
  class DES1 {
  var $key;
  function DES1($key) {
  $this->key = $key;
  }
  function encrypt($input) {
  $size = mcrypt_get_block_size('des', 'ecb');
  $input = $this->pkcs5_pad($input, $size);
  $key = $this->key;
  $td = mcrypt_mole_open('des', '', 'ecb', '');
  $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  @mcrypt_generic_init($td, $key, $iv);
  $data = mcrypt_generic($td, $input);
  mcrypt_generic_deinit($td);
  mcrypt_mole_close($td);
  $data = base64_encode($data);
  return $data;
  }
  function decrypt($encrypted) {
  $encrypted = base64_decode($encrypted);
  $key =$this->key;
  $td = mcrypt_mole_open('des','','ecb','');
  //使用MCRYPT_DES算法,cbc模式
  $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  $ks = mcrypt_enc_get_key_size($td);
  @mcrypt_generic_init($td, $key, $iv);
  //初始处理
  $decrypted = mdecrypt_generic($td, $encrypted);
  //解密
  mcrypt_generic_deinit($td);
  //结束
  mcrypt_mole_close($td);
  $y=$this->pkcs5_unpad($decrypted);
  return $y;
  }
  function pkcs5_pad ($text, $blocksize) {
  $pad = $blocksize - (strlen($text) % $blocksize);
  return $text . str_repeat(chr($pad), $pad);
  }
  function pkcs5_unpad($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);
  }
  }
  $key = "abcdefgh";
  $input = "a";
  $crypt = new DES1($key);
  echo "Encode:".$crypt->encrypt($input)."<br/>";
  echo "Decode:".$crypt->decrypt($crypt->encr
  
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 怎么对PHP文件进行加密 php接口怎么加密啊 PHP数据加密怎么做,需求看问题补充 怎么处理php加密的数据 php excel加密的实现方法有什么 用php将密码存入数据库,用什么方法进行加密? PHP如何进行加密 实现数据安全 如何对PHP文件进行加密 PHP传值加密 分享如何使用PHP将URL地址参数进行加密传输 PHP的传输数据加密是怎么实现的 源文件格式是什么意思啊? 怎样关闭爱奇艺里面的自动续费 黄金vip会员怎么取消自动续费 黄金vip会员一个月自动续费怎么取消 什么叫源文件? 源文件是什么意思 淘宝子账号怎么删除 淘宝怎么创建子账号 淘宝卖家设置了子账户之后,怎么用子账户登录? php入门教程 php实现rsa算法,该怎么处理 如何给php代码加密 php有什么加密出来比较短的加密方法 php怎么在post前加密用户名 密码 php做sns游戏需要注意游戏数据传输的加密吗? oppo手机建议买哪款? oppo手机推荐入手哪一款好? oppo手机建议买哪款 目前市面上OPPO手机哪款性价比高,适合购买? 目前oppo手机哪款性价比高? 目前oppo手机哪款性价比高 OPPO手机哪款手机值得入手? 荣耀手机和OPPO手机买哪款合适啊? 我想买个oppo手机,建议哪款好 华为手机和OPPO手机买哪款比较合适? 荣耀手机和OPPO手机买哪款? oppo和华为买哪款手机合适? 荣耀手机和OPPO手机买哪款了? 华为手机和OPPO手机买哪款比较好点了?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com