标题:我这段代码printf在加密模块乱码,希望指点
只看楼主
陆心竹
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-5-7
结帖率:0
已结贴  问题点数:20 回复次数:4 
我这段代码printf在加密模块乱码,希望指点
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAC_HEADER "Physical Address"
#define max 100
int encodeORdecode(int x,int a,int b){//加解密算法
    int r=1;
    do{
        r*=x;
        r=r%b;
        a--;
    }while(a!=0);
    return r;
}
void encode(char *a){
    int i,k;
    int  tmp[max];
    printf("\n");
    int t=strlen(a);
    int p=11,q=13;
    int n,f,e;
    n=p*q;
    f=(p-1)*(q-1);
    e=7;
    //printf("两个公钥分别是:e=%d  n=%d\n",e,n);
    //int d=1;
    //while((d*e)%f!=1)  d++;         //形成私钥
     printf("\n");

            for( k=0;k<t;k++)  tmp[k]=a[k];  
            for( i=0;i<t;i++)
            a[i]=encodeORdecode(tmp[i],e,n);   
            printf("加密后字符串为:");
            for(i=0;i<t;i++) printf("%c",a[i]); printf("\n");
}
void deencode(char *a){
    int i;
    int  c[max];
    int  tmp[max];
    printf("\n");
    int t=strlen(a);
    int p=11,q=13;
    int n,f,e;
    n=p*q;
    f=(p-1)*(q-1);
    e=7;
    //printf("两个公钥分别是:e=%d  n=%d\n",e,n);
    int d=1;
    while((d*e)%f!=1)  d++;         //形成私钥
   
            for( i=0;i<t;i++) tmp[i]=a[i];
            for( i=0;i<t;i++)
            c[i]=encodeORdecode(tmp[i],d,n);
            printf("解密后字符串为:");
            for( i=0;i<t;i++) printf("%c",c[i]);  printf("\n");
}
void tiquMAC(char *mac)
{
 int argc=0;
 char * argv [100 ]={0};
 char *netname = "本地连接";
 char buf [4096];
 FILE *fp;
 char *tmp;
 int size;
 
 if(argc == 2) netname = argv[1];

 system("ipconfig /all > tmp.txt");
 fp = fopen("tmp.txt", "r");
 if(fp == NULL)
 {
  printf("can not find tmp.txt, please check \n");
 }
 fseek(fp, 0, SEEK_END);
 size = ftell(fp);
 if(size >= sizeof(buf))
 {
  printf("the buffer size is too small, should be more than %d\n", size);
  fclose(fp);
 }
 fseek(fp, 0, SEEK_SET);
 memset(buf, 0, sizeof(buf));
 fread(buf, 1, size, fp);
 fclose(fp);
 tmp = strstr(buf, netname);
 if(tmp == NULL)
 {
  printf("can not find network name %s, please check your network name\n", netname);
 }
 tmp = strstr(tmp, MAC_HEADER);
 if(tmp == NULL)
 {
  printf("no "MAC_HEADER"found in file, please check\n");
  printf("are you using chinese windows? if so, please check in file and change the MAC_HEADER define\n");
 }
 tmp = strstr(tmp, ":");
 if(tmp)
 {
  memset(mac, 0, sizeof(mac));
  memcpy(mac, &tmp[2], 17);
  mac[17]='\0';
   }
 remove("tmp.txt");
}
int main(){
    char a[100]={0};
     tiquMAC(a);
     for(int i=0;a[i]!='\0';i++)
         printf("%c",a[i]);
     //printf("\n");
    encode(a);
    deencode(a);
    return 0;
}
搜索更多相关主题的帖子: include encode return 加密 
2015-05-07 09:39
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:20 
乱不乱码 和printf 有神马关系

DO IT YOURSELF !
2015-05-07 09:40
陆心竹
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-5-7
得分:0 
打印出来的不是我期望,printf("加密后字符串为:");其中的加密被替换成其他字符
2015-05-07 09:42
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
这里面说头很多啊

比如: 你的加密/反加密是不是 百分之百在 ASCII和ASCII之间转换呢

因你的加密/反加密算法都是你自己设计的  所以只有你自己能够调试

DO IT YOURSELF !
2015-05-07 09:44
陆心竹
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-5-7
得分:0 
这两个函数我是拼起来的,分开运行无问题,但是合起来就不行了。还有救吗?
2015-05-07 09:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-444937-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016016 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved