注册 登录
编程论坛 C++教室

专家来解释一下这两个小程序撒

yukeyyo 发布于 2011-11-22 17:00, 759 次点击
程序代码:
//图像文件加密
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    char ch;
    ifstream in;
    in.open("old.jpg",ios::binary);
    if(!in)
    {
        cout<<"Cannot open file.";
        return 1;
    }
    ofstream out;
    out.open("tmp.jpg",ios::binary);
    if(!out)
    {
        cout<<"Cannot open file.";
        return 1;
    }
    while(in)
    {
        in.get(ch);
        ch=ch^char(0xFF);
        if(in) out.put(ch);
    }
    in.close;
    out.close;
    return 0;
}//图像文件解密
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    char ch;
    ifstream in;
    in.open("tmp.jpg",ios::binary);
    if(!in)
    {
        cout<<"Cannot open file.";
        return 1;
    }
    ofstream out;
    out.open("old.jpg",ios::binary);
    if(!out)
    {
        cout<<"Cannot open file.";
        return 1;
    }
    while(in)
    {
        in.get(ch);
        ch=ch^char(0xFF);
        if(in) out.put(ch);
    }
    in.close;
    out.close;
    return 0;
}


谁能告诉我加密与解密的原理是什么不?
4 回复
#2
Toomj2011-11-22 17:26
就是用异或加密法(ch=ch^char(0xFF);),改变图像的二进制存储那一群1、0,就不能再显示出来了,也就是加密;由于异或算法是对称算法,所以两次异或就回到原样,也就是解密
#3
yukeyyo2011-11-22 17:41
回复 2楼 Toomj
那其他加密也可以用这条语句么?
#4
Toomj2011-11-23 12:55
回复 3楼 yukeyyo
可以,而且由于是对称的,加密解密都采用同一程序算法。不过这种加密算法强度极低,和直接给明文没什么区别,网上一大票破解工具。你可以查下其他加密方法
#5
waterstar2011-11-23 20:32
异或加密是最简单的加密方法了,解密也是最简单了,要复杂一点的异或加密可以随机地抽取多少个字母,例如“water”这个五个字母,然后顺序对每个图像位进行异或,不断地异或知道加密结束。这种方法被破解也非常快,如果这要加密的话,就要好好研究研究了,毕竟密码学是非常精深的东西。
1