① C語言實現將字元串進行加密處理,每個字元的加密規則是,將其轉換為對應的ASCII碼加3後對應 的字元輸出
輸入的是英文字元的話,直接加3就可以,但是如果是中文字元的話,如果直接高位和地位加3也可以,但是解密的時候就有一個不確定的存在,因為中文字元的ascii編碼是有0xfe這樣的存在,加上3的話就到時候還原就變得不確定。所以如果是中文字元加密的話,應該把兩個ascii碼轉合並為兩個位元組無符號類型,然後再加3。
② c#中,如何將含有字母和數字的字元串加密成一個全是字母的字元串,並解密
publicclassStringEncrypt
{
///<summary>
///使用預設密鑰字元串加密
///</summary>
///<paramname="original">明文</param>
///<returns>密文</returns>
publicstaticstringEncrypt(stringoriginal)
{
returnEncrypt(original,"xyzABc*$!");
}
///<summary>
///使用預設密鑰解密
///</summary>
///<paramname="original">密文</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal)
{
returnDecrypt(original,"xyzABc*$!",System.Text.Encoding.Default);
}
///<summary>
///使用給定密鑰解密
///</summary>
///<paramname="original">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal,stringkey)
{
returnDecrypt(original,key,System.Text.Encoding.Default);
}
///<summary>
///使用預設密鑰解密,返回指定編碼方式明文
///</summary>
///<paramname="original">密文</param>
///<paramname="encoding">編碼方式</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal,Encodingencoding)
{
returnDecrypt(original,"xyzABc*$!",encoding);
}
///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">原始文字</param>
///<paramname="key">密鑰</param>
///<paramname="encoding">字元編碼方案</param>
///<returns>密文</returns>
publicstaticstringEncrypt(stringoriginal,stringkey)
{
byte[]buff=System.Text.Encoding.Default.GetBytes(original);
byte[]kb=System.Text.Encoding.Default.GetBytes(key);
returnConvert.ToBase64String(Encrypt(buff,kb));
}
///<summary>
///使用給定密鑰解密
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<paramname="encoding">字元編碼方案</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringencrypted,stringkey,Encodingencoding)
{
byte[]buff=Convert.FromBase64String(encrypted);
byte[]kb=System.Text.Encoding.Default.GetBytes(key);
returnencoding.GetString(Decrypt(buff,kb));
}
///<summary>
///生成MD5摘要
///</summary>
///<paramname="original">數據源</param>
///<returns>摘要</returns>
publicstaticbyte[]MakeMD5(byte[]original)
{
=newMD5CryptoServiceProvider();
byte[]keyhash=hashmd5.ComputeHash(original);
hashmd5=null;
returnkeyhash;
}
///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">明文</param>
///<paramname="key">密鑰</param>
///<returns>密文</returns>
publicstaticbyte[]Encrypt(byte[]original,byte[]key)
{
=();
des.Key=MakeMD5(key);
des.Mode=CipherMode.ECB;
returndes.CreateEncryptor().TransformFinalBlock(original,0,original.Length);
}
///<summary>
///使用給定密鑰解密數據
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticbyte[]Decrypt(byte[]encrypted,byte[]key)
{
=();
des.Key=MakeMD5(key);
des.Mode=CipherMode.ECB;
returndes.CreateDecryptor().TransformFinalBlock(encrypted,0,encrypted.Length);
}
///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">原始數據</param>
///<paramname="key">密鑰</param>
///<returns>密文</returns>
publicstaticbyte[]Encrypt(byte[]original)
{
byte[]key=System.Text.Encoding.Default.GetBytes("xyzABc*$!");
returnEncrypt(original,key);
}
///<summary>
///使用預設密鑰解密數據
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticbyte[]Decrypt(byte[]encrypted)
{
byte[]key=System.Text.Encoding.Default.GetBytes("xyzABc*$!");
returnDecrypt(encrypted,key);
}
}
③ 12:字元串加密、解密
編碼: 將計算機中的字元串按照一定的順序表示成二進制數據的過程
各國字元編碼都不一樣:
1、計算機-> 表示[英文字母、數字、部分特殊符號]-> ascii編碼 [0~256]
2、萬國碼,統一字元編碼[號稱可以統一全球范圍內任何語言的表示方式]
任何語言中的任何數據,都可以使用一個字元來表示 unicode編碼
3、中國有GB2312-> GBK -> GB18030
4、數據傳輸編碼:unicode transfer format 8 bit [UTF-8]
python中的編碼解碼:
要命的規則:字元串的編碼解碼,一直都是任何語言中一個難點和重點
任何字元串->都是由位元組組成的!
python3中:字元:(str);位元組(bytes)
字元->位元組:encode 編碼:將一個字元串編碼成計算機可以操作的二進制數據
位元組->字元:decode 解碼:將一個二進制數據按照指定的編碼~解碼成自然數據
什麼是加密: 將一個明文數據,按照指定的演算法,運算得到一個其他的可以隱藏真實信息的密文數據,這個過程稱為加密;處理的演算法稱為加密演算法;用到的關鍵數據稱為密鑰
什麼是解密: 按照指定的演算法和關鍵數據,將一個密文數據進行逆向運算得到正確的明文數據的過程成為解密操作
(1)、單向加密演算法:只能加密,不能解密的演算法
如:用戶賬號密碼(單向加密)存儲,此時任何人都不能查看該用戶的明文密碼
流程->用戶輸入明文密碼->加密->和存儲的密文密碼進行比較->相等-成功
單向散列加密演算法-> MD5加密
單項哈希加密演算法-> SHAX加密
(2)、雙向加密演算法:可以加密,加密的數據可以解密得到明文數據
使用在更多的場景;數據進行加密傳輸->目標地址->解密得到明文數據進行處理
對稱加密:加密和解密使用相同的秘鑰;
非對稱加密:加密和解密使用不同的秘鑰;如HTTPS傳輸數據
hashlib主要提供字元加密功能,將md5和sha模塊整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等演算法
注意: hashlib 加密啊的字元串類型為二進制編碼,直接加密字元串會報如下錯誤:
有兩種方式可以將字元串轉化為二進制數據
④ C語言 字元串加密
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(void)
{
charc[100];
intk;
intlen,i,temp;
scanf("%s",c);
scanf("%d",&k);
len=(int)strlen(c);
k=k%26;
for(i=0;i<len;i++)
{
if(c[i]>='a'&&c[i]<='z')
{
if(c[i]+k>'z')
{
temp='z'-c[i];
temp=k-temp-1;
c[i]='a'+temp;
}
else
{
c[i]+=k;
}
}
elseif(c[i]>='A'&&c[i]<='Z')
{
if(c[i]+k>'Z')
{
temp='Z'-c[i];
temp=k-temp-1;
c[i]='A'+temp;
}
else
{
c[i]+=k;
}
}
else
{
/*donothing*/
}
}
printf("%s ",c);
return0;
}
⑤ 字元串加密
#include <stdio.h>
#include <stdlib.h>
void replace(char *src, int n)
{
char *s = src;
n = n % 26;
while(*s != 0)
{
*s = *s + n;
if(*s > 'Z') *s -= 26;
s++;
}
}
void disorder(char *s, char *key)
{
int len = 0 , i = 0;
char *tmp;
while(s[len++] != 0);
tmp = (char*)malloc(sizeof(char) * (len));
while(i < len) tmp[i] = s[i++];
for(i = 0; i < len - 1; i++)
{
s[i] = tmp[key[i] - '0' - 1];
}
free(tmp);
}
void main()
{
int n;
char str[100], key[100];
printf("input <str n order >: ");
//請合法輸入eg. AXZ 2 231
scanf("%s%d%s", str, &n, key);
replace(str, n);
printf("str = %s\n", str);
disorder(str, key);
printf("str = %s\n", str);
}