[2014-03-20]iOS与JAVA 通信时Enco…

由于最近涉及到的项目需要在与后台通信时,需要加解密,而后台发出来得Json是通过Encode加密了的,所以在接受后,需要在ios中用stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding方法来解密成UTF8。当然同样的,我需要发送请求给后台时,用stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding来加密。

iOS:接受--->解密---->加密:

- (void)reloadData

{

    NSURL *url = [NSURL URLWithString:@"http://cqzjt.com:8081/testapp/servlet/Appinfo"];

     

    NSString *post=@"postData";

     

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

     

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    [request setHTTPMethod:@"POST"];

    [request setHTTPBody:postData];

    [request setTimeoutInterval:10.0];

     

    NSOperationQueue *queue = [[NSOperationQueue alloc]init];

    [NSURLConnection sendAsynchronousRequest:request

                                       queue:queue

                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){

                               if (error) {

                                   NSLog(@"Httperror:%@%d", error.localizedDescription,error.code);

                               }else{

                                    

                                   NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];

                                    

                                   NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

                                    

                                   NSLog(@"HttpResponseCode:%d", responseCode);

                                   NSLog(@"接受加密数据 %@",responseString);

                                   NSString *decodeUrl = [responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

                                   NSLog(@"解密数据:%@",decodeUrl);

                                    

                                   NSString *encodeUrl = [decodeUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

                                   NSLog(@"加密数据:%@",encodeUrl);

                               }

                           }];

}

输出结果:[2014-03-20]iOS与JAVA <wbr>通信时Encode,Decode加解密。


JAVA:加密-->解密:

public void setEncodeResult(String encodeResult)  

    {  

        char[] src = encodeResult.toCharArray();//将待编码字串拆分成字符数组  

        StringBuilder sb = new StringBuilder();//保存编码后字符  

        //将待编码字串拆分成字符数组  

        for(int i = 0; i< src.length; i++)  

        {  

            if(Character.isDigit(src[i]))  

            {  

                if(i != src.length-1)  

                {//满足条件3  

                    char[] temp = new char[Character.getNumericValue(src[i])+1];  

                    Arrays.fill(temp,src[i+1]);  

                    sb.append(temp);  

                    sb.append("_");  

                }  

                else  

                {//满足条件2  

                    sb.append(src[i]);  

                }  

            }  

            else if(src[i] == '_')//满足条件5  

            {  

                sb.append("\\UL");  

                sb.append("_");  

            }  

            else if(i == src.length-1)//满足条件1,且到了字串结尾  

            {  

                sb.append(src[i]);  

            }  

            else//满足条件1,且未到字串结尾  

            {  

                sb.append(src[i]);  

                sb.append("_");  

            }  

        }  

        this.encodeResult = new String(sb);//创建返回编码后字串  

    }  

    //获得编码后结果  

    public String getEncodeResult()  

    {  

        return encodeResult;  

    }  

    //解码设置  

    public void setDecodeResult(String encodeResult)  

    {  

        String[] temp = encodeResult.split("_");  

        StringBuilder sb = new StringBuilder();  

        for(int i = 0; i< temp.length; i++)  

        {  

            if(temp[i].equals("\\UL"))  

                sb.append("_");  

            else if(temp[i].length()>1)  

                sb.append(temp[i].length()-1);  

            else  

                sb.append(temp[i]);  

        }  

        this.decodeResult = new String(sb);  

    }  

    //获得解码后结果  

    public String getDecodeResult()  

    {  

        return decodeResult;  

    }  

  

    public static void main(String[] args)  

    {  

        System.out.println("请输入待编码字符串(以回车键结束):");  

        String source = "";  

        try  

        {  

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

            source = br.readLine();  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

        Encode e = new Encode();  

        e.setEncodeResult(source);  

        System.out.println("编码后结果:"+e.getEncodeResult());  

        e.setDecodeResult(e.getEncodeResult());  

        System.out.println("解码后结果:"+e.getDecodeResult());  

    }  

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ENCO命令是一个用于编码和解码文件的常用命令,下面是用C语言实现ENCO命令的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // ENCO命令编码函数 void encode(char *input_file, char *output_file) { FILE *fp_in, *fp_out; char ch, prev_ch = 0; int count = 0; // 打开输入文件 fp_in = fopen(input_file, "rb"); if (fp_in == NULL) { printf("无法打开输入文件 %s!\n", input_file); exit(1); } // 打开输出文件 fp_out = fopen(output_file, "wb"); if (fp_out == NULL) { printf("无法打开输出文件 %s!\n", output_file); exit(1); } // 读取输入文件并编码 while ((ch = fgetc(fp_in)) != EOF) { if (ch == prev_ch) { // 如果当前字符与前一个字符相同 count++; // 计数器加1 } else { // 如果当前字符与前一个字符不同 if (count > 0) { // 如果前面有重复字符 fputc(count + 128, fp_out); // 输出计数器值 fputc(prev_ch, fp_out); // 输出重复字符 } else { // 如果前面没有重复字符 fputc(prev_ch, fp_out); // 直接输出当前字符 } prev_ch = ch; // 更新前一个字符为当前字符 count = 0; // 重置计数器 } } // 处理最后一个字符 if (count > 0) { // 如果最后一个字符是重复的 fputc(count + 128, fp_out); // 输出计数器值 fputc(prev_ch, fp_out); // 输出重复字符 } else { // 如果最后一个字符不是重复的 fputc(prev_ch, fp_out); // 直接输出最后一个字符 } // 关闭文件 fclose(fp_in); fclose(fp_out); } // ENCO命令解码函数 void decode(char *input_file, char *output_file) { FILE *fp_in, *fp_out; char ch, prev_ch = 0; int count = 0; // 打开输入文件 fp_in = fopen(input_file, "rb"); if (fp_in == NULL) { printf("无法打开输入文件 %s!\n", input_file); exit(1); } // 打开输出文件 fp_out = fopen(output_file, "wb"); if (fp_out == NULL) { printf("无法打开输出文件 %s!\n", output_file); exit(1); } // 读取输入文件并解码 while ((ch = fgetc(fp_in)) != EOF) { if (ch >= 128) { // 如果当前字符表示计数器值 count = ch - 128; // 计数器值为当前字符减去128 ch = fgetc(fp_in); // 读取下一个字符作为重复字符 for (int i = 0; i < count; i++) { fputc(ch, fp_out); // 输出重复字符 } } else { // 如果当前字符不是计数器值 fputc(ch, fp_out); // 直接输出当前字符 } } // 关闭文件 fclose(fp_in); fclose(fp_out); } int main(int argc, char *argv[]) { if (argc != 4) { printf("用法:ENCO [-e/-d] input_file output_file\n"); return 1; } if (strcmp(argv[1], "-e") == 0) { encode(argv[2], argv[3]); printf("编码完成!\n"); } else if (strcmp(argv[1], "-d") == 0) { decode(argv[2], argv[3]); printf("解码完成!\n"); } else { printf("无效的选项 %s!\n", argv[1]); return 1; } return 0; } ``` 该示例代码实现了ENCO命令的编码和解码功能,通过命令行参数指定输入文件和输出文件,使用`-e`选项进行编码,使用`-d`选项进行解码。在编码过程中,重复的字符会被计数并输出计数器值和重复字符,未重复的字符直接输出。在解码过程中,读取到计数器值会输出多个重复字符,读取到非计数器值直接输出当前字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值