今天,小编来讲解一下最最最最最基础的一些字符串加密,对于一些刚刚入门的同学来说,加密和解密一串密文还是有些难度的,而对于网络上MD5,希哈加密等又对初学者有些复杂,这里,我给出了几种十分简单的加密方式,不过这不是用来使密码更加安全,而是为了在生活中让传信的中间人不容易直接看出你的明文,以保证在短时间内能够让你的信息通过中间人送到接收者手中(再重声一边,这不是密码加密,并不能防止信息泄漏,任何懂一点密码的人都能通过字母出现率来复原出明文)

另外此文章只能作为参考,这些加密方法的加强版小编希望新手能够自己探索,所以这里只给出几个idea

1.摩尔斯电码,曾经十分流行,原理十分简单,就是把每个字符替换成相应的由‘.‘,’-‘组成的一个对应字符串。由于密文只有两种字符,可以使用0和1代替’.’,‘-’

下面给出c语言加密方法

#include <bits/stdc++.h>  
#include<cstdio>
using namespace std;

int main()
{
	string s;
	getline (cin,s);
	for(int i=0;i<=s.size();i++)
	{
		if(s[i]<='z'&&s[i]>='a'||s[i]>='A'&&s[i]<='Z')
		{
			if(s[i]=='a'||s[i]=='A')cout<<".-/ ";
			else if(s[i]=='b'||s[i]=='B')cout<<"-.../ ";
			else if(s[i]=='c'||s[i]=='C')cout<<"-.-./ ";
			else if(s[i]=='d'||s[i]=='D')cout<<"-../ ";
			else if(s[i]=='e'||s[i]=='E')cout<<"./ ";
			else if(s[i]=='f'||s[i]=='F')cout<<"..-./ ";
			else if(s[i]=='g'||s[i]=='G')cout<<"--./ ";
			else if(s[i]=='h'||s[i]=='H')cout<<"..../ ";
			else if(s[i]=='i'||s[i]=='I')cout<<"../ ";
			else if(s[i]=='j'||s[i]=='J')cout<<".---/ ";
			else if(s[i]=='k'||s[i]=='K')cout<<"-.-/ ";
			else if(s[i]=='l'||s[i]=='L')cout<<".-../ ";
			else if(s[i]=='m'||s[i]=='M')cout<<"--/ ";
			else if(s[i]=='n'||s[i]=='N')cout<<"-./ ";
			else if(s[i]=='o'||s[i]=='O')cout<<"---/ ";
			else if(s[i]=='p'||s[i]=='P')cout<<".--./ ";
			else if(s[i]=='q'||s[i]=='Q')cout<<"--.-/ ";
			else if(s[i]=='r'||s[i]=='R')cout<<".-./ ";
			else if(s[i]=='s'||s[i]=='S')cout<<".../ ";
			else if(s[i]=='t'||s[i]=='T')cout<<"-/ ";
			else if(s[i]=='u'||s[i]=='U')cout<<"..-/ ";
			else if(s[i]=='v'||s[i]=='V')cout<<"...-/ ";
			else if(s[i]=='w'||s[i]=='W')cout<<".--/ ";
			else if(s[i]=='x'||s[i]=='X')cout<<"-..-/ ";
			else if(s[i]=='y'||s[i]=='Y')cout<<"-.--/ ";
			else if(s[i]=='z'||s[i]=='Z')cout<<"--../ ";
			
		}
		else if(s[i]>='0'&&s[i]<='9')
		{
			if (s[i]=='1')cout<<".----/ ";
			if (s[i]=='2')cout<<"..---/ ";
			if (s[i]=='3')cout<<"...--/ ";
			if (s[i]=='4')cout<<"....-/ ";
			if (s[i]=='5')cout<<"...../ ";
			if (s[i]=='6')cout<<"-..../ ";
			if (s[i]=='7')cout<<"--.../ ";
			if (s[i]=='8')cout<<"---../ ";
			if (s[i]=='9')cout<<"----./ ";
			if (s[i]=='0')cout<<"-----/ ";
		}
		else	if(s[i]==' ')cout<<"-.--.-/ ";
		else	if(s[i]==',')cout<<"--..--/ ";
		else	if(s[i]=='.')cout<<".-.-.-/ ";
		else	if(s[i]=='!')cout<<"-.-.--/ ";
		else	if(s[i]=='?')cout<<"..--../ ";
		else 	cout<<"<error>/ ";
	}
	cout <<endl<<"---------------------"<<endl;
	system("pause");
	return 0;
}

代码原理太过简单,这里不再阐述

下面是解密

#include<iostream> 
using namespace std;

int main()
{
	string ss;
	getline(cin,ss);
	
	int i=0;
	string s;
	while(i<=ss.size())
	{
		if(ss[i]!='/'){
			s+=ss[i];
			i++;
			continue;
		}
		else { 
			s+="/";
		    if(s==".-/")cout<<'a';
			else if(s=="-.../")cout<<'b';
			else if(s=="-.-./")cout<<'c';
			else if(s=="-../")cout<<'d';
			else if(s=="./")cout<<'e';
			else if(s=="..-./")cout<<'f';
			else if(s=="--./")cout<<'g';
			else if(s=="..../")cout<<'h';
			else if(s=="../")cout<<'i';
			else if(s==".---/")cout<<'j';
			else if(s=="-.-/")cout<<'k';
			else if(s==".-../")cout<<'l';
			else if(s=="--/")cout<<'m';
			else if(s=="-./")cout<<'n';
			else if(s=="---/")cout<<'o';
			else if(s==".--./")cout<<'p';
			else if(s=="--.-/")cout<<'q';
			else if(s==".-./")cout<<'r';
			else if(s==".../")cout<<'s';
			else if(s=="-/")cout<<'t';
			else if(s=="..-/")cout<<'u';
			else if(s=="...-/")cout<<'v';
			else if(s==".--/")cout<<'w';
			else if(s=="-..-/")cout<<'x';
			else if(s=="-.--/")cout<<'y';
			else if(s=="--../")cout<<'z';
			
	        else if(s==".----/")cout<<'1';	    
	        else if(s=="..---/")cout<<'2';	
	        else if(s=="...--/")cout<<'3';	
	        else if(s=="....-/")cout<<'4';	
	        else if(s=="...../")cout<<'5';	
	        else if(s=="-..../")cout<<'6';	
	        else if(s=="--.../")cout<<'7';	    
	        else if(s=="---../")cout<<'8';	
	        else if(s=="----./")cout<<'9';	
	        else if(s=="-----/")cout<<'0';
				
	        else if(s=="-.--.-/")cout<<' ';	
	        else if(s=="--..--/")cout<<',';	    
	        else if(s==".-.-.-/")cout<<'.';	
	        else if(s=="-.-.--/")cout<<'!';	
			else if(s=="..--../")cout<<'?';	
			else cout<<"<error>";
			s="";
		}
   		i++;
	}
	cout <<endl;
	cout <<"-------------------------------------"<<endl;
	cout <<endl;
	system("pause");
	return 0;
}

在运用摩尔斯电码的时候会发现必须要使用‘/’来区分两个字符这个在解密的时候格式需要正确,有兴趣可以自己尝试改变加密后的格式,使其更容易辨认

2.这个是一个非常经典的加密方式,就是将每个字符对应的密文往后移一个,比如说a用b代替,b用c代替,以此类推,而由于把所有字符向后移一位,所以密钥为1.密钥在这里是解密的关键,需要接收者在接受密文以前就知道密钥,而密钥在这里最多有25种加密状况,只要全部试一下就破译出来了,所以很少人会用

下面给出加密代码

#include <bits/stdc++.h>//密钥:1 
using namespace std;
char a[80];
int i=0,l;
int main()
{
	gets(a);
	l=strlen(a);
	for(i=0;i<l;i++)
	{
	if(a[i]=='Z'||a[i]=='z')
	    a[i]=a[i]-25;
	else 
	    if(a[i]>='a'&&a[i]<'z'||a[i]>='A'&&a[i]<'Z')
			a[i]=a[i]+1;
	cout<<a[i];
	}
	cout<<endl<<"----------------"<<endl;
	system("pause");
return 0; 
	}

一下是解密代码

#include<iostream>
#include<cstring>
#include <cstdio>
char s[201];
using namespace std;
int main()
{
	gets(s);
	for(int i=0;i<strlen(s);++i)
	{
	if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')
        {
          if(s[i]>='a'&&s[i]<'b'||s[i]>='A'&&s[i]<'B')
              s[i]+=25;
          else
              s[i]-=1;
        }
    }
 cout<<s;
 cout<<endl<<"----------------"<<endl;
 
 system("pause");
 return 0;
 }

代码原理太过简单,这里不再阐述

3.这种密码是第二种密码的变换,主要是将每个字母能对应的密文做成表,这样每个字母都有自己的对应密文,并且对应表可以是随机,所以降低被破解的可能,这种情况下,可能出现的密码表共有25!种,相对安全很多。
这里小编没有给出代码,理解了原理之后,我希望能够自己写出代码

这种密码的解密相对复杂一点,需要通过每个字母出现的频率来发现那个字母对应哪个密文。比如e是出现率最高的,所以如果一个字母在密文中出现频率非常高就很有可能是e,以此类推,最终破译字符串。所以正常来讲可以尝试自己手写破译

下面给出一道题目,可以在留言区回答,请大佬略过,如果以上信息有误,请在留言区纠正,谢谢

Decrypt the following text qoymlNlpY :ccdf lpy yzJ .qoh ln lxigqoh qlxlm eeiw zot ydpy gmipylnoC ,zot gmiyqdncyzo ho ydpy ci lniqk tN .lsie sooe tlpy ydpw yom ,smipy amd tdc tlpy ydpw tj lefolf gmigazb ho ydpy ci lniqk tN .tyicoiqzk ho ydpy ci lniqk tN .edminiqk d nd i clT

更多推荐

简单加密入门-附加c语言代码实现