iOS 安卓 服务器后台 公用的简单加密和解密

#pragma mark 加密字符串

encryption 加密结果

decoding   解密结果

+ (NSString *)encryptForPlainText:(NSString *)plainText

{

    //保存加密后的字符

    NSMutableString *encryption=[NSMutableStringstring];

    //编码转换后的字符串 UTF_8->iso-8859-1

    NSString *encoding=[[NSStringalloc]initWithData:[plainTextdataUsingEncoding:NSUTF8StringEncoding]encoding:NSISOLatin1StringEncoding];

    

    for(int i=0,j=0;i<encoding.length;i++,j++){

        if(j==SECRETKEY.length){

            j=0;

        }

        //异或后的字符

        char cipher=(char)([encodingcharacterAtIndex:i]^[SECRETKEYcharacterAtIndex:j]);

        //NSLog(@"%c转成16进制的字符串:%@,%@",cipher,[NSString stringWithFormat:@"%hhx",cipher],[NSString stringWithFormat:@"%x",cipher&0xff]);

        //转成16进制形式的字符串 \x8b转成8b字符串

        NSString *strCipher= [NSStringstringWithFormat:@"%hhx",cipher];

        if(strCipher.length ==1){

            [encryption appendFormat:@"0%@",strCipher];

        }else{

            [encryption appendString:strCipher];

        }

    }

    return encryption;

}

 

#pragma mark 解密如果不为加密字符则返回原字符

 

+ (NSString *)decryptForEncryption:(NSString *)encryption {

    //保存解密后的字符

    NSMutableString *decryption=[NSMutableStringstring];

    //解码字符

    NSString *decoding=nil;

    

    for(int i=0,j=0;i<encryption.length/2;i++,j++){

        if(j==SECRETKEY.length){

            j=0;

        }

        //截取16进制形式的字符串 \x8b中的8b

        NSString *tem=[encryptionsubstringWithRange:NSMakeRange(i*2,2)];

        char *endptr;

        //把16进制形式的字符串转为字符

        char n=(char)(int)strtoul([temUTF8String],&endptr,16);

        //判断是否为加密字符

        if (n=='\0'&&*endptr!='\0') {

            [decryption setString:@""];

            break;

        }

        [decryption appendFormat:@"%c",(char)(n^[SECRETKEYcharacterAtIndex:j])];

    }

    if (![decryptionisEqualToString:@""]) {

        //编码后的字符串 iso-8859-1 -> UTF_8

        decoding=[[NSStringalloc]initWithData:[[decryptioncopy] dataUsingEncoding:NSISOLatin1StringEncoding]encoding:NSUTF8StringEncoding];

    }

    if (decoding==nil) {

        decoding=encryption;

    }

    return decoding;

}

 

SECRETKEY为一个宏定义 

例如 :

#define SECRETKEY @"jddjdjdJFzlgktyf"

 

SECRETKEY为我们所要的密匙,iOS 安卓 后台 可以自己随意定义 但是前后 SECRETKEY  必须要统一

 

 

java 后台和安卓 本人不是太懂 secretKey  SECRETKEY 是一样的

  1. public class XOREncryptAndDecrypt {  
  2.       
  3.     //密钥 加解密的密钥必须相同 可自定义  
  4.     private static final String secretKey ="abcdefghijklmnopqrstuvwxyz";   
  5.       
  6.     /** 
  7.      * 字符串加密 
  8.      * @param plainText 要加密的字符串 
  9.      * @return 加密后的字符串 
  10.      */  
  11.     public static String encrypt(String plainText){  
  12.          String encryption = "";  
  13.          try {  
  14.              plainText =  new String(plainText.getBytes("UTF-8"),"iso-8859-1");  
  15.             } catch (Exception e) {  
  16.             }  
  17.          char[] cipher=new char[plainText.length()];  
  18.          for(int i=0,j=0;i<plainText.length();i++,j++){  
  19.              if(j==secretKey.length())  
  20.                  j=0;  
  21.              cipher[i]=(char) (plainText.charAt(i)^secretKey.charAt(j));  
  22.              String strCipher= Integer.toHexString(cipher[i]);  
  23.              if(strCipher.length() == 1){  
  24.                  encryption+="0"+strCipher;  
  25.              }else{  
  26.                  encryption+=strCipher;  
  27.              }  
  28.          }  
  29.          return encryption;  
  30.      }  
  31.   
  32.     /** 
  33.      * 解密字符串 
  34.      * @param encryption 要解密的字符串 
  35.      * @return 解密后的字符串 
  36.      */  
  37.     public static String decrypt(String encryption) {  
  38.          char[] decryption=new char[encryption.length()/2];  
  39.          for(int i=0,j=0;i<encryption.length()/2;i++,j++){  
  40.              if(j==secretKey.length())  
  41.                  j=0;  
  42.              char n=(char)(int)Integer.valueOf(encryption.substring(i*2,i*2+2),16);  
  43.              decryption[i]=(char)(n^secretKey.charAt(j));  
  44.          }  
  45.          String decoding="";  
  46.          try {  
  47.              decoding = new String(String.valueOf(decryption).getBytes("iso-8859-1"),"UTF-8");  
  48.                 } catch (Exception e) {  
  49.             }  
  50.          return decoding;  
  51.      }  
  52.   
  53.     /** 
  54.      * @param args 
  55.      */  
  56.     public static void main(String[] args) {  
  57.         String name="你好";  
  58.          String tem=XOREncryptAndDecrypt.encrypt(name);  
  59.          System.out.println(tem);  
  60.          System.out.println(XOREncryptAndDecrypt.decrypt(tem));  
  61.   
  62.     }  
  63.   
  64. }  

 

js方面:

function sea(encryption) {

    var decoding = ''

    var secretKey = "WQLYYCSXSBDSRYJFzlgktyf"

    var brr = secretKey.split('')

    for(var i = 0, j = 0; i < encryption.length / 2; i++, j++) {

        if(j == brr.length) {

            j = 0

        }

        var n = parseInt(encryption.substring(2 * i, 2 * i + 2), 16)

        decoding += '' + String.fromCharCode(n ^ (brr[j].charCodeAt()))

    }

    // console.log(decoding)

    return decoding

}

function aes(str) {

    var str = str;

    var secretKey = "WQLYYCSXSBDSRYJFzlgktyf"

    var cipher = Array(str.length)

    var arr = str.split('');

    var brr = secretKey.split('')

    var encryption = ''

    for (var i = 0, j = 0; i < arr.length; i++ , j++) {

        if (j == secretKey.length)

            j = 0

            cipher[i] = (String(arr[i]).charCodeAt()) ^ (brr[j].charCodeAt())

            var strCipher = cipher[i].toString(16)

            

            if (strCipher.length == 1) {

                encryption += '0' + strCipher

            } else {

                encryption += strCipher

            }

    }

    // console.log(encryption)

    return encryption

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王 哪跑!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值