搜索
查看: 535|回复: 5
打印 上一主题 下一主题

都戳进来看,原创

[复制链接]
跳转到指定楼层
楼主
发表于 2016-4-8 19:43:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
开源,JB2新加密方式!!

JB2.h

[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <JB2_decrypt_encrypt.h>

int JB2(char jm[],char mm[])
{
        if(jm != 'encrypt' || jm != 'decrypt')
    {JB2-encrypt(jm[],mm[]);}
    if(jm == 'encrypt')
    {JB2-encrypt(jm[],mm[]);}
    if(jm == 'decrypt')
    {JB2-decrypt(jm[],mm[]);}
        if(jm == 'obtain')
    {JB2-obtain(jm[],mm[]);}
}

int JB2_encrypt(char jm,char mm[])
{JB2-encrypt(jm[],mm[]);}

int JB2_decrypt(char jm[],char mm[])
{JB2-decrypt(jm[],mm[]);}

int JB2_obtain(char jm[],char mm[])
{JB2-decrypt(jm[],mm[]);}
[/mw_shl_code]

JB2_decrypt_encrypt.h
[mw_shl_code=c,true]#include <stdio.h>  
#include <ctype.h>  
#include <conio.h>  
#include <stdlib.h>  
#include <string.h>

char key[512];  
char path[100];
char buf[512];  
char text[]="这是检验值,用来判断密码是否正确";//放在文件头用于密码校验,防止错误的密码破坏源文件  

const int TextLength=strlen(text);  
const char tmp[100]="D://tmp";//临时文件路径  

int JB2-encrypt(char path[],char key[])//加密函数  
{  
    FILE *fp=fopen(path,"rb");  
    if(fp==NULL)  
        return -1;  
    FILE *fp2=fopen(tmp,"wb");  
    int n,i,KeyLength=strlen(key);  
    for(i=0;i<TextLength;i++)  
        buf=text^key[i%KeyLength];  
    fwrite(buf,sizeof(char),TextLength,fp2);//TextLength不能写成sizeof(text)  
    while((n=fread(buf,sizeof(char),KeyLength,fp))>0)  
    {  
        for(i=0;i<n;i++)  
            buf^=key;  
        fwrite(buf,sizeof(char),n,fp2);  
    }  
    fclose(fp);  
    fclose(fp2);  
    remove(path);  
    rename(tmp,path);  
    return 0;  
}  

int JB2-decrypt(char path[],char key[])//解密函数  
{  
    FILE *fp=fopen(path,"rb");  
    if(fp==NULL)  
        return -1;  
    int i,KeyLength=strlen(key);  
    int n=fread(buf,sizeof(char),TextLength,fp);  
    for(i=0;i<n;i++)  
        buf^=key[i%KeyLength];  
    buf[n]='\0';  
    if(strcmp(buf,text)!=0)  
        {  
            fclose(fp);  
            return 1;  
        }     
    FILE *fp2=fopen(tmp,"wb");  
    while((n=fread(buf,sizeof(char),KeyLength,fp))>0)  
    {  
        for(i=0;i<n;i++)  
            buf^=key;  
        fwrite(buf,sizeof(char),n,fp2);  
    }  
    fclose(fp);  
    fclose(fp2);  
    remove(path);  
    rename(tmp,path);  
    return 0;  
}  

int GetPwd(char pwd[])  
{  
    int p;  
    char ch;  
    p=0;  
    while((ch=getch())!='\r')//判断是否是回车  
    {  
        if(ch==8)//实现backspace键的功能,其中backspace键的ascii码是8  
            {  
                putchar('\b');  
                putchar(' ');  
                putchar('\b');  
                if(p>0)//最多只能删到没有字符  
                p--;  
                continue;  
            }  
        if(!isdigit(ch)&&!isalpha(ch))//判断是否是数字或字符  
            continue;  
        putchar('*');//在屏幕上打印星号  
        pwd[p++]=ch;//保存密码  
    }         
    pwd[p]=0;//结束字符串  
    puts("");     
    return 0;
}  
[/mw_shl_code]

text.c
[mw_shl_code=c,true]#include <JB2.h>

int main()  
{  
    char key[512];  
    char path[100];  
    while(1)  
    {  
        int cmd,Error;  
        system("cls");  
        puts("请选择命令\n[1] 加密文件\n[2] 解密文件\n[0] 退出程序");  
        cmd=getch();  
        if(!cmd)  
            break;  
        puts("请输入要加密文件的路径:(提示:可以直接用鼠标将文件拖动到程序中)");  
        scanf("%s",path);  
        memset(key,0,sizeof(key));  
        switch(cmd)  
        {  
        case 1:   
        getchar();//吸收换行  
        do  
        {     
            char str[512];  
            puts("请设置密码(请不要使用\\、\/等特殊字符):");  
            GetPwd(key);  
            puts("请重复密码:");  
            GetPwd(str);  
            if(strcmp(key,str)!=0||strlen(key)==0)  
            puts("两次密码不一致或密码为空!");  
            else  
                break;  
        }while(1);  
        puts("加密中……");  
        Error=JB2-encrypt(path,key);  
        if(Error==1)  
            puts("文件不存在或路径中存在空格!");  
        else  
        puts("加密成功!");  
        break;  
        case 2:  
        puts("请输入密码(请不要使用\\、\/等特殊字符):");  
        getchar();  
        do{  
        GetPwd(key);  
        if(strlen(key)==0)  
            puts("密码不能为空!");  
        else  
            break;  
        }while(1);  
        puts("解密中……");  
        Error=JB2-decrypt(path,key);  
        if(Error==0)  
            puts("解密成功!");  
        else if(Error==1)  
            puts("密码不正确!\n");  
        else   
            puts("文件不存在或路径中存在空格!");  
        break;  
        default:  
            puts("不合法命令!\n");  
            break;  
        }  
        system("pause");  
    }  
    return 0;  
}  
[/mw_shl_code]

沙发
 楼主| 发表于 2016-4-8 19:47:15 | 只看该作者
可以更改,并发上来,新手有不懂的发XXX.h/XXX.c
代码:
……
我会发解释
板凳
发表于 2016-4-10 18:35:34 | 只看该作者
太NB了,不过C语言命名标识浮规则不让用中华线吧
地板
发表于 2016-4-27 10:05:50 | 只看该作者
完全复制但是提示编译失败

j.png (143.32 KB, 下载次数: 31)

j.png
5#
发表于 2016-4-27 10:06:16 | 只看该作者
求解答
6#
发表于 2016-4-27 12:50:59 | 只看该作者
1.把自己写的头文件用引号括起来,而不是尖括号
2.其实撸主不需要写两个头文件,一个就够了,标识符不能用-号
3.楼上可以试试用dev-c++
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表