暴力破解密码C语言

合集下载

rsa加密解密算法c语言程序

rsa加密解密算法c语言程序

rsa加密解密算法c语言程序RSA加密解密算法是一种公钥加密算法,发明于1977年,基于两个大质数的乘积难分解性,能够对短文本进行加解密。

以下是RSA加密解密算法的C语言程序。

一、密钥生成首先定义了一个结构体存储RSA密钥,该结构体包含三个元素:n、e和d。

- n = p * q,其中p和q为大质数;- e为与(p - 1) * (q - 1)互质的自然数,一般选取65537;- d为e模(p - 1) * (q - 1)的逆元素,即满足e * d ≡ 1 (mod (p - 1) * (q - 1)))的自然数。

generateRSAKey函数通过调用randomPrime函数生成两个大质数p和q,再通过Euclidean函数计算(p - 1) * (q - 1)的值phi,最后继续使用extendedEuclidean函数计算d的值,最终将生成的密钥存储在RSAKey结构体中。

```c#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>#define k 1024 // 密钥长度typedef struct {unsigned long long n;unsigned long long e;unsigned long long d;} RSAKey;unsigned long long randomPrime(unsigned long long n);unsigned long long gcd(unsigned long long a, unsigned long long b);unsigned long long Euclidean(unsigned long long a, unsigned long long b);RSAKey generateRSAKey();// 生成一个小于n的随机质数unsigned long long randomPrime(unsigned long long n) {unsigned long long p;do {p = rand() % n;while (!(p & 1)) // 确保p为奇数p = rand() % n;} while (gcd(p, n) != 1); // 确保p和n互质return p;}二、加密和解密下面定义了两个函数:encrypt和decrypt,其中encrypt函数用于将明文转换为密文,decrypt函数用于将密文转换为明文。

RSA加密解密算法C语言代码

RSA加密解密算法C语言代码

#include<stdio.h>#include<string.h>#include <stdlib.h>#include <time.h>#include <math.h>#include <malloc.h>#define MAX 100#define LEN sizeof(struct slink)void sub(int a[MAX],int b[MAX] ,int c[MAX] );struct slink{int bignum[MAX];/*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/struct slink *next;};/*/--------------------------------------自己建立的大数运算库-------------------------------------*/void print( int a[MAX] ){int i;for(i=0;i<a[99];i++)printf("%d",a[a[99]-i-1]);printf("\n\n");return;}int cmp(int a1[MAX],int a2[MAX]){ int l1, l2;int i;l1=a1[99];l2=a2[99];if (l1>l2)return 1;if (l1<l2)return -1;for(i=(l1-1);i>=0;i--){if (a1[i]>a2[i])return 1 ;if (a1[i]<a2[i])return -1;}}void mov(int a[MAX],int *b){int j;for(j=0;j<MAX;j++)b[j]=a[j];return ;}void mul(int a1[MAX],int a2[MAX],int *c) {int i,j;int y;int x;int z;int w;int l1, l2;l1=a1[MAX-1];l2=a2[MAX-1];if (a1[MAX-2]=='-'&& a2[MAX-2]=='-') c[MAX-2]=0;else if (a1[MAX-2]=='-')c[MAX-2]='-';else if (a2[MAX-2]=='-')c[MAX-2]='-';for(i=0;i<l1;i++){for(j=0;j<l2;j++){x=a1[i]*a2[j];y=x/10;z=x%10;w=i+j;c[w]=c[w]+z;c[w+1]=c[w+1]+y+c[w]/10;c[w]=c[w]%10;}}w=l1+l2;if(c[w-1]==0)w=w-1;c[MAX-1]=w;return;}void add(int a1[MAX],int a2[MAX],int *c) {int i,l1,l2;int len,temp[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')) {c[MAX-2]='-';}else if (a1[MAX-2]=='-'){mov(a1,temp);temp[MAX-2]=0;sub(a2,temp,c);return;}else if (a2[MAX-2]=='-'){mov(a2,temp);temp[98]=0;sub(a1,temp,c);return;}if(l1<l2)len=l1;else len=l2;for(i=0;i<len;i++){c[i]=(a1[i]+a2[i]+k)%10;k=(a1[i]+a2[i]+k)/10;}if(l1>len){for(i=len;i<l1;i++){c[i]=(a1[i]+k)%10;k=(a1[i]+k)/10;}if(k!=0){c[l1]=k;len=l1+1;}}else{for(i=len;i<l2;i++){c[i]=(a2[i]+k)%10;k=(a2[i]+k)/10;}if(k!=0){c[l2]=k;len=l2+1;}else len=l2;}c[99]=len;return;}void sub(int a1[MAX],int a2[MAX],int *c) {int i,l1,l2;int len,t1[MAX],t2[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if ((a1[MAX-2]=='-') && (a2[MAX-2]=='-')) {mov(a1,t1);mov(a2,t2);t1[MAX-2]=0;t2[MAX-2]=0;sub(t2,t1,c);return;}else if( a2[MAX-2]=='-'){mov(a2,t2);t2[MAX-2]=0;add(a1,t2,c);return;}else if (a1[MAX-2]=='-'){mov(a2,t2);add(a1,t2,c);return;}if(cmp(a1,a2)==1){len=l2;for(i=0;i<len;i++){if ((a1[i]-k-a2[i])<0){c[i]=(a1[i]-a2[i]-k+10)%10;k=1;}else{c[i]=(a1[i]-a2[i]-k)%10;k=0;}}for(i=len;i<l1;i++){if ((a1[i]-k)<0){c[i]=(a1[i]-k+10)%10;k=1;}else{c[i]=(a1[i]-k)%10;k=0;}}if(c[l1-1]==0)/*使得数组C中的前面所以0字符不显示了,如1000-20=0980--->显示为980了*/ {len=l1-1;i=2;while (c[l1-i]==0)/*111456-111450=00006,消除0后变成了6;*/{len=l1-i;i++;}else{len=l1;}}elseif(cmp(a1,a2)==(-1)){c[MAX-2]='-';len=l1;for(i=0;i<len;i++){if ((a2[i]-k-a1[i])<0){c[i]=(a2[i]-a1[i]-k+10)%10;k=1;}else{c[i]=(a2[i]-a1[i]-k)%10;k=0;}}for(i=len;i<l2;i++){if ((a2[i]-k)<0){c[i]=(a2[i]-k+10)%10;k=1;}else{c[i]=(a2[i]-k)%10;k=0;}}if(c[l2-1]==0){len=l2-1;i=2;while (c[l1-i]==0){len=l1-i;i++;}}else len=l2;}else if(cmp(a1,a2)==0){len=1;c[len-1]=0;}c[MAX-1]=len;return;}void mod(int a[MAX],int b[MAX],int *c)/*/c=a mod b//注意:经检验知道此处A和C的数组都改变了。

C语言加密与解密算法

C语言加密与解密算法

C语言加密与解密算法在计算机科学与信息安全领域,加密与解密算法起着至关重要的作用。

加密算法用于将原始数据转换为不可读的密文,而解密算法则用于将密文还原为可读的原始数据。

C语言是一种常用的编程语言,具备高效性和灵活性,适用于加密与解密算法的开发。

本文将介绍几种常用的C语言加密与解密算法。

一、凯撒密码算法凯撒密码算法是一种最简单的替换加密算法,通过将字母按照固定的偏移量进行替换来实现加密与解密。

以下是一个简单的C语言凯撒密码实现例子:```c#include <stdio.h>void caesarEncrypt(char* message, int key) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' + key) % 26 + 'a';} else if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' + key) % 26 + 'A';}i++;}}void caesarDecrypt(char* message, int key) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' - key + 26) % 26 + 'a'; } else if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' - key + 26) % 26 + 'A'; }i++;}}int main() {char message[] = "Hello, World!";int key = 3;printf("Original message: %s\n", message);caesarEncrypt(message, key);printf("Encrypted message: %s\n", message);caesarDecrypt(message, key);printf("Decrypted message: %s\n", message);return 0;}```以上程序演示了凯撒密码的加密与解密过程,通过指定偏移量实现对消息的加密与解密。

C语言中的数据加密与解密技术

C语言中的数据加密与解密技术

C语言中的数据加密与解密技术数据加密与解密技术在现代信息安全领域中起着至关重要的作用,能够保护数据的隐私性和完整性,防止数据被非法窃取和篡改。

在C语言中,我们可以利用各种加密算法实现数据加密和解密操作,确保数据在传输和存储过程中的安全性。

在C语言中,常用的数据加密算法包括对称加密算法和非对称加密算法。

对称加密算法使用相同的密钥进行加密和解密操作,简单高效,适用于小规模数据加密。

常见的对称加密算法有DES、AES等。

非对称加密算法需要一对公钥和私钥,公钥用于加密数据,私钥用于解密数据,安全性更高,适用于加密大规模数据。

常见的非对称加密算法有RSA、ECC等。

在C语言中,我们可以使用openssl库或者自行实现上述加密算法来实现数据加密和解密。

下面以AES对称加密算法为例进行介绍。

首先,我们需要在C语言中引入openssl库,通过以下方式进行安装和引入:```sudo apt-get install libssl-dev``````c#include <openssl/aes.h>#include <openssl/rand.h>```接下来,我们可以定义一个函数来实现数据的加密和解密操作:```cvoid encrypt_decrypt_data(unsigned char *data, int data_len, unsigned char *key, unsigned char *iv, int encrypt) {AES_KEY aes_key;AES_set_encrypt_key(key, 128, &aes_key);if (encrypt) {AES_cbc_encrypt(data, data, data_len, &aes_key, iv, AES_ENCRYPT);} else {AES_cbc_encrypt(data, data, data_len, &aes_key, iv, AES_DECRYPT);}}```在上面的函数中,我们使用AES算法对数据进行加密或解密操作,其中data 为待加密或解密的数据,data_len为数据长度,key为密钥,iv为初始化向量,encrypt为加密标志。

C语言加密解密源程序代码

C语言加密解密源程序代码
//文件加密与解密//
#include<stdio.h>
#include<stdlib.h>
#define M 1000 //预设一个指定文件大小的数字M,方便以后改变
void yiwei() ;
int main()
{
printf("\n$****本程序只能对英文文本进行加密解密操作,如有不便尽请谅解****$");
printf("\n");
printf("\n$******************退出程序输入:1*********************$"); // 欢迎界面
printf("\n");
printf("\n$***************移位加密与解密输入:2******************$"); //
fclose(outfile);
break;
}
printf("\n");
printf("\n*-·-·-感谢您的使用,欢迎再次使用-·-·-*\n\n"); // 使用完感谢语!
exit(0);
}
/*****************调用二进制加密解密函数*********************/
printf(" --> ");
rewind(outfile);
while((data=fgetc(outfile))!=EOF)
printf("%c",data);
printf("\n\n");

ncrack使用方法

ncrack使用方法

ncrack使用方法(原创版3篇)目录(篇1)1.ncrack 简介2.ncrack 的基本使用方法3.ncrack 的高级使用方法4.ncrack 的注意事项正文(篇1)【ncrack 简介】crack 是一款强大的网络破解工具,它能够实现多种网络服务的密码破解,如 SSH、FTP、HTTP、HTTPS 等。

ncrack 采用 C 语言编写,具有执行速度快、性能稳定的特点,适用于 Windows、Linux 和 Mac OS 等操作系统。

【ncrack 的基本使用方法】1.安装 ncrack在使用 ncrack 之前,需要先安装 ncrack。

用户可以通过官方网站下载对应版本的安装包,按照提示进行安装。

2.启动 ncrack安装完成后,在命令行界面输入“ncrack”命令,即可启动 ncrack。

在启动时,ncrack 会提示用户输入一个字典文件,该文件包含了要破解的用户名和密码。

3.设置破解目标用户需要指定要破解的目标 IP 地址和端口。

例如,要破解的目标是IP 地址为 192.168.1.100 的 SSH 服务,需要输入命令:“ncrack192.168.1.100 22”。

4.开始破解设置好目标后,输入“y”开始破解。

ncrack 会根据字典文件中的信息,尝试对目标进行密码破解。

破解过程中,用户可以通过查看输出信息,了解破解进度。

【ncrack 的高级使用方法】1.使用多个字典文件用户可以指定多个字典文件,以提高破解成功率。

在启动 ncrack 时,输入“L”命令,然后输入字典文件的路径。

2.暴力破解用户可以通过设置字典文件中密码的长度和复杂度,实现暴力破解。

例如,可以设置密码长度为 8 位,包含大小写字母、数字和特殊字符。

3.缓存破解结果为了提高破解速度,用户可以将破解结果进行缓存。

在破解过程中,输入“C”命令,即可将当前破解结果进行缓存。

【ncrack 的注意事项】1.遵守法律法规在使用 ncrack 时,请遵守我国相关法律法规,切勿用于非法目的。

C加密解密算法

C加密解密算法

1、方法一 (不可逆)public string EncryptPassword(string PasswordString,string PasswordFormat ){string encryptPassword = null;if (PasswordFormat="SHA1"){encryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordS tring,"SHA1");}elseif (PasswordFormat="MD5"){ encryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(Passwor dString,"MD5");}return encryptPassword ;}2、方法二 (可逆)public interface IBindesh{string encode(string str);string decode(string str);}public class EncryptionDecryption : IBindesh{public string encode(string str){string htext = "";for ( int i = 0; i < str.Length; i++){htext = htext + (char) (str[i] + 10 - 1 * 2);}return htext;public string decode(string str){string dtext = "";for ( int i=0; i < str.Length; i++){dtext = dtext + (char) (str[i] - 10 + 1*2);}return dtext;}3、方法三 (可逆)const string KEY_64 = "VavicApp";//注意了,是8个字符,64位const string IV_64 = "VavicApp";public string Encode(string data){byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();int i = cryptoProvider.KeySize;MemoryStream ms = new MemoryStream();CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey,byIV), CryptoStreamMode.Write);StreamWriter sw = new StreamWriter(cst);sw.Write(data);sw.Flush();cst.FlushFinalBlock();sw.Flush();return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);public string Decode(string data){byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);byte[] byEnc;try{byEnc = Convert.FromBase64String(data);}catch{return null;}DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();MemoryStream ms = new MemoryStream(byEnc);CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey,byIV), CryptoStreamMode.Read);StreamReader sr = new StreamReader(cst);return sr.ReadToEnd();}4、MD5不可逆加密(32位加密)public string GetMD5(string s, string _input_charset){/**//**//**//// <summary>/// 与ASP兼容的MD5加密算法/// </summary>MD5 md5 = new MD5CryptoServiceProvider();byte[] t = puteHash(Encoding.GetEncoding(_input_charset).GetBytes(s));StringBuilder sb = new StringBuilder(32);for (int i = 0; i < t.Length; i++){sb.Append(t[i].ToString("x").PadLeft(2, '0'));}return sb.ToString();}(16位加密)public static string GetMd5Str(string ConvertString){MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();string t2 =BitConverter.ToString(puteHash(UTF8Encoding.Default.GetBytes(ConvertStrin g)), 4, 8);t2 = t2.Replace("-", "");return t2;}5、加解文本文件//加密文件private static void EncryptData(String inName, String outName, byte[] desKey, byte[]desIV){//Create the file streams to handle the input and output files.FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fout.SetLength(0);//Create variables to help with read and write.byte[] bin = new byte[100]; //This is intermediate storage for the encryption.long rdlen = 0; //This is the total number of bytes written. long totlen = fin.Length; //This is the total length of the input file. int len; //This is the number of bytes to be written ata time.DES des = new DESCryptoServiceProvider();CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV),CryptoStreamMode.Write);//Read from the input file, then encrypt and write to the output file.while (rdlen < totlen){len = fin.Read(bin, 0, 100);encStream.Write(bin, 0, len);rdlen = rdlen + len;}encStream.Close();fout.Close();fin.Close();}//解密文件private static void DecryptData(String inName, String outName, byte[] desKey, byte[]desIV){//Create the file streams to handle the input and output files.FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fout.SetLength(0);//Create variables to help with read and write.byte[] bin = new byte[100]; //This is intermediate storage for the encryption.long rdlen = 0; //This is the total number of bytes written. long totlen = fin.Length; //This is the total length of the input file. int len; //This is the number of bytes to be written at a time.DES des = new DESCryptoServiceProvider();CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV),CryptoStreamMode.Write);//Read from the input file, then encrypt and write to the output file. while (rdlen < totlen){len = fin.Read(bin, 0, 100);encStream.Write(bin, 0, len);rdlen = rdlen + len;}encStream.Close();fout.Close();fin.Close();}6、using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;using System.IO;namespace Component{public class Security{public Security(){}//默认密钥向量private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };/**//**//**//**//**//**//**//// <summary>/// DES加密字符串/// </summary>/// <param name="encryptString">待加密的字符串</param>/// <param name="encryptKey">加密密钥,要求为8位</param>/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>public static string EncryptDES(string encryptString, string encryptKey){try{byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));byte[] rgbIV = Keys;byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream();CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,rgbIV), CryptoStreamMode.Write);cStream.Write(inputByteArray, 0, inputByteArray.Length);cStream.FlushFinalBlock();return Convert.ToBase64String(mStream.ToArray());}catch{return encryptString;}}/**//**//**//**//**//**//**//// <summary>/// DES解密字符串/// </summary>/// <param name="decryptString">待解密的字符串</param>/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param> /// <returns>解密成功返回解密后的字符串,失败返源串</returns>public static string DecryptDES(string decryptString, string decryptKey) {try{byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);byte[] rgbIV = Keys;byte[] inputByteArray = Convert.FromBase64String(decryptString); DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream();CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey,rgbIV), CryptoStreamMode.Write);cStream.Write(inputByteArray, 0, inputByteArray.Length);cStream.FlushFinalBlock();return Encoding.UTF8.GetString(mStream.ToArray()); }catch{return decryptString;}}}}。

c语言解密代码

c语言解密代码

c语言解密代码下面是一个简单的`C`语言加密解密代码,实现了凯撒加密的功能:```c#include<stdio.h>#include<stdlib.h>#include<string.h>// 函数 encode() 将字母顺序推后 n 位,实现文件加密功能void encode(char str[], int n){char c;int i;for (i = 0; i < strlen(str); ++i){// 遍历字符串c = str[i];if (c >='a' && c <='z'){// c 是小写字母if (c + n % 26 <='z'){// 若加密后不超出小写字母范围str[i] = (char)(c + n % 26);}else{// 加密后超出小写字母范围,从头开始循环小写字母 str[i] = (char)(c + n % 26 - 26);}elseif (c >='A' && c <='Z'){// c 为大写字母if (c + n % 26 <= 'Z'){// 加密后不超出大写字母范围str[i] = (char)(c + n % 26);}else{// 加密后超出大写字母范围,从头开始循环大写字母 str[i] = (char)(c + n % 26 - 26);}}else{// 不是字母,不加密str[i] = c;printf("\nAfter encode: \n");puts(str);}}// 输出加密后的字符串printf("\nAfter encode: \n");puts(str);}// 实现解密功能,将字母顺序前移 n 位void decode(char str[], int n){int i;for (i = 0; i < strlen(str); ++i){c = str[i];if (c >='a' && c <='z'){// 解密后还为小写字母,直接解密if (c - n % 26 >='a'){str[i] = (char)(c - n % 26);}else{// 解密后不为小写字母了,通过循环小写字母处理为小写字母 str[i] = (char)(c - n % 26 + 26);}}elseif (c >= 'A' && c <='Z'){// c 为大写字母if (c - n % 26 >='A'){// 解密后还为大写字母str[i] = (char)(c - n % 26);}else{// 解密后不为大写字母了,循环大写字母,处理为大写字母str[i] = (char)(c - n % 26 + 26);}}else{// 不是字母,不加密str[i] = c;}}// 输出解密后的字符串printf("\nAfter decode: \n");puts(str);}int main(){char str[20];int n;printf("请输入字符串(以空格结束输入):\n");gets(str);printf("请输入密钥(1-25的整数):\n");scanf("%d", &n);printf("加密前的字符串为:%s\n", str);encode(str, n);printf("加密后的字符串为:%s\n", str);decode(str, n);printf("解密后的字符串为:%s\n", str);return 0;}```在上述代码中,加密函数`encode()`通过将字符串中的每个字符循环向后移动`n`位实现加密,解密函数`decode()`通过将字符串中的每个字符循环向前移动`n`位实现解密。

c语言课程设计-文件加密解密(含源代码)

c语言课程设计-文件加密解密(含源代码)

c语言课程设计-文件加密解密(含源代码)
概述
本文主要介绍如何使用c语言进行文件的加密和解密操作,同时提供相应的源
代码。

文件加密是一种保护文件数据的方法,使得未经许可的用户无法读取或修改加密过的文件。

而文件解密则是将加密文档还原为可读的文件。

实现
本程序使用C语言实现文件的加密和解密操作,主要包括如下步骤:
1.读取待加密/解密的文件
2.处理文件数据,进行加密/解密操作
3.将处理后的数据写入到新的文件中
为了保证数据的加密强度,本程序使用了简单的异或运算进行加密/解密操作。

加密和解密时使用的密钥是相同的,用户可以自行指定。

程序会根据密钥对每个文件字节进行异或操作,加密后的文件字节和原文件字节不同,保证数据的安全性。

源代码
以下是文件加密和解密的C语言代码。

其中encrypt函数用于加密,decrypt
函数用于解密,用户需要根据不同的需求进行调用。

```c #include <stdio.h> #include <stdlib.h> #include <string.h>
//加密函数 void encrypt(const char* input_filename, const char*
output_filename, const char* key){ FILE input_file, output_file; char ch; int i = 0;
input_file = fopen(input_filename, \。

c语言高级教程(解密)

c语言高级教程(解密)

高质量C++/C 编程指南目录前言 (6)第1 章文件结构 (8)1.1 版权和版本的声明 (8)1.2 头文件的结构 (8)1.3 定义文件的结构 (8)1.4 头文件的作用 (8)1.5 目录结构 (8)第2 章程序的版式 (8)2.1 空行 (8)2.2 代码行 (8)2.3 代码行内的空格 (8)2.4 对齐 (8)2.5 长行拆分 (8)2.6 修饰符的位置 (8)2.7 注释 (8)2.8 类的版式 (8)第3 章命名规则 (8)3.1 共性规则 (8)3.2 简单的W INDOWS 应用程序命名规则 (8)3.3 简单的U NIX 应用程序命名规则 (8)第4 章表达式和基本语句 (8)4.1 运算符的优先级 (8)4.2 复合表达式 (8)4.3 IF 语句 (8)4.4 循环语句的效率 (8)4.5 FOR 语句的循环控制变量 (8)4.6 SWITCH 语句 (8)4.7 GOTO 语句 (8)第5 章常量 (8)5.1 为什么需要常量 (8)5.2 CONST 与#DEFINE 的比较 (8)5.3 常量定义规则 (8)第6 章函数设计.....6.1 参数的规则 (8)6.2 返回值的规则 (8)6.3 函数内部实现的规则 (8)6.4 其它建议 (8)6.5 使用断言 (8)6.6 引用与指针的比较 (8)第7 章内存管理 (8)7.1 内存分配方式 (8)7.2 常见的内存错误及其对策 (8)7.3 指针与数组的对比 (8)7.4 指针参数是如何传递内存的? (8)7.5 FREE 和DELETE 把指针怎么啦? (8)7.6 动态内存会被自动释放吗? (8)7.7 杜绝“野指针” (8)7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ? (8)7.9 内存耗尽怎么办? (8)7.10 MALLOC/FREE 的使用要点 (8)7.11 NEW/DELETE 的使用要点 (8)7.12 一些心得体会 (8)第8 章C++函数的高级特性 (8)8.1 函数重载的概念 (8)8.2 成员函数的重载、覆盖与隐藏 (8)8.3 参数的缺省值 (8)8.4 运算符重载 (8)8.5 函数内联 (8)8.6 一些心得体会 (8)第9 章类的构造函数、析构函数与赋值函数 (8)9.1 构造函数与析构函数的起源 (8)9.2 构造函数的初始化表 (8)9.3 构造和析构的次序 (8)9.4 示例:类S TRING 的构造函数与析构函数 (8)9.5 不要轻视拷贝构造函数与赋值函数 (8)9.6 示例:类S TRING 的拷贝构造函数与赋值函数 (8)9.7 偷懒的办法处理拷贝构造函数与赋值函数 (8)9.8 如何在派生类中实现类的基本函数 (8)第10 章类的继承与组合 (8)10.1 继承 (8)10.2 组合 (8)第11 章其它编程经验 (8)11.1 使用CONST 提高函数的健壮性 (8)11.2 提高程序的效率 (8)11.3 一些有益的建议..........................................................................................................8 参考文献.................................................................................................................................8 附录A :C++/C 代码审查表................................................................................................8 附录B :C++/C 试题............................................................................................................8 附录C :C++/C 试题的答案与评分标准.................................................................... .. (8)前言软件质量是被大多数程序员挂在嘴上而不是放在心上的东西!除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?”别难过,作者只不过比你早几年、多几次惊慌而已。

c语言实现对密码(字符串)进行加密,并解密

c语言实现对密码(字符串)进行加密,并解密

c语⾔实现对密码(字符串)进⾏加密,并解密 1/**习惯把密码明⽂存在本地⽂件中,这个⼩程序可以把存的密码以密⽂形式保存**/2 #include <stdio.h>3 #include <string.h>4 #include <stdlib.h>5 #include <time.h>6int chartoasc(char c);7int xor(int i);8char asctochar(int a);9int rand_num();10int encrypt(const char *org_pass,char *new_pass);11int decrypt(const char *new_pass,char *org_pass);1213int main(int argc,char *argv[])14 {15if(argc!=2)16 {17 printf("参数输⼊有误!\n");18 printf("usage:<pass flag >\nflag=1:加密;flag=2:解密\n");19return -1;20 }21int flag = 0;22int len = 0;23int i = 0;24int ret = 0;25char password[20];26char new_pass[50];27char org_pass[50];28int test1 = 0;29int test2 = 0;30char test3 = 0;31char *p = NULL;3233 bzero(password,sizeof(password));34 bzero(new_pass,sizeof(new_pass));35 bzero(org_pass,sizeof(org_pass));3637 flag = atoi(argv[1]);38if(flag == 1)39 {40 printf("请输⼊需要加密的密码:");41 scanf("%s",password);42 ret = encrypt(password,&new_pass);43if(ret)44 {45 printf("密码加密失败!\n");46return -1;47 }48 printf("新密码[%s]\n",new_pass);49 }50else if(flag ==2)51 {52 printf("请输⼊需要解密的密码:");53 scanf("%s",password);54 ret = decrypt(password,&org_pass);55if(ret)56 {57 printf("获取原密码失败!\n");58return -1;59 }60 printf("原密码[%s]\n",org_pass);61 }62else63 {64 printf("加密标志输⼊如有误!\n");65return -1;66 }6768return0;69 }7071/**将字符转换为ASCII值**/72int chartoasc(char c)73 {74int i= 0;75 i = c;76return i;77 }7879/**将ASCII进⾏异或运算,产⽣新的ASCII值**/80int xor(int i)81 {82int m = 27;83int result = 0;84if(59==i || 100==i)85 {86return i;87 }88 result = i^m;89return result;90 }9192/**将ASCII值转换为字符**/93char asctochar(int a)94 {95char c;96 c = a;97return c;98 }99100/**输⼊原密码产⽣新的密码**/101int encrypt(const char *org_pass,char *new_pass) 102 {103char org_password[50];104char new_password[50];105int len = 0;106int i = 0;107int asc = 0 ;108char ch = 0;109int x = 0;110111 bzero(org_password,sizeof(org_password)); 112 bzero(new_password,sizeof(new_password)); 113 strcpy(org_password, org_pass);114 len = strlen(org_password);115for(i=0 ; i<len ; i++)116 {117 ch = org_password[i];118 asc = chartoasc(ch);119 x = xor(asc);120 new_password[i] = asctochar(x);121 }122 strcpy(new_pass,new_password);123124return0;125 }126127/**输⼊加密后的密码返回原密码**/128int decrypt(const char *new_pass,char *org_pass) 129 {130char new_password[50];131char org_password[50];132char ch;133int a = -1;134int len =0;135int i=0;136int x = -1;137138 bzero(new_password,sizeof(new_password)); 139 bzero(org_password,sizeof(org_password)); 140141 strcpy(new_password,new_pass);142 len = strlen(new_password);143for(i=0;i<len;i++)144 {145 ch = new_password[i];146 a = chartoasc(ch);147 x = xor(a);148 org_password[i]=asctochar(x);149 }150 strcpy(org_pass,org_password);151152return0;153 }后续考虑实现界⾯程序的改进。

rsa加密解密算法C语言代码

rsa加密解密算法C语言代码

#include<stdio.h>#include<string.h>#include <stdlib.h>#include <time.h>#include <math.h>#include <malloc.h>#define MAX 100#define LEN sizeof(struct slink)void sub(int a[MAX],int b[MAX] ,int c[MAX] );struct slink{int bignum[MAX];/*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/struct slink *next;};/*/--------------------------------------自己建立的大数运算库-------------------------------------*/void print( int a[MAX] ){int i;for(i=0;i<a[99];i++)printf("%d",a[a[99]-i-1]);printf("\n\n");return;}int cmp(int a1[MAX],int a2[MAX]){ int l1, l2;int i;l1=a1[99];l2=a2[99];if (l1>l2)return 1;if (l1<l2)return -1;for(i=(l1-1);i>=0;i--){if (a1[i]>a2[i])return 1 ;if (a1[i]<a2[i])return -1;}return 0;}void mov(int a[MAX],int *b){int j;for(j=0;j<MAX;j++)b[j]=a[j];return ;}void mul(int a1[MAX],int a2[MAX],int *c) {int i,j;int y;int x;int z;int w;int l1, l2;l1=a1[MAX-1];l2=a2[MAX-1];if (a1[MAX-2]=='-'&& a2[MAX-2]=='-') c[MAX-2]=0;else if (a1[MAX-2]=='-')c[MAX-2]='-';else if (a2[MAX-2]=='-')c[MAX-2]='-';for(i=0;i<l1;i++){for(j=0;j<l2;j++){x=a1[i]*a2[j];y=x/10;z=x%10;w=i+j;c[w]=c[w]+z;c[w+1]=c[w+1]+y+c[w]/10;c[w]=c[w]%10;}}w=l1+l2;if(c[w-1]==0)w=w-1;c[MAX-1]=w;return;}void add(int a1[MAX],int a2[MAX],int *c) {int i,l1,l2;int len,temp[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')) {c[MAX-2]='-';}else if (a1[MAX-2]=='-'){mov(a1,temp);temp[MAX-2]=0;sub(a2,temp,c);return;}else if (a2[MAX-2]=='-'){mov(a2,temp);temp[98]=0;sub(a1,temp,c);return;}if(l1<l2)len=l1;else len=l2;for(i=0;i<len;i++){c[i]=(a1[i]+a2[i]+k)%10;k=(a1[i]+a2[i]+k)/10;}if(l1>len){for(i=len;i<l1;i++){c[i]=(a1[i]+k)%10;k=(a1[i]+k)/10;}if(k!=0){c[l1]=k;len=l1+1;}else len=l1;}else{for(i=len;i<l2;i++){c[i]=(a2[i]+k)%10;k=(a2[i]+k)/10;}if(k!=0){c[l2]=k;len=l2+1;}else len=l2;}c[99]=len;return;}void sub(int a1[MAX],int a2[MAX],int *c) {int i,l1,l2;int len,t1[MAX],t2[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if ((a1[MAX-2]=='-') && (a2[MAX-2]=='-')) {mov(a1,t1);mov(a2,t2);t1[MAX-2]=0;t2[MAX-2]=0;sub(t2,t1,c);return;}else if( a2[MAX-2]=='-'){mov(a2,t2);t2[MAX-2]=0;add(a1,t2,c);return;}else if (a1[MAX-2]=='-'){mov(a2,t2);t2[MAX-2]='-';add(a1,t2,c);return;}if(cmp(a1,a2)==1){len=l2;for(i=0;i<len;i++){if ((a1[i]-k-a2[i])<0){c[i]=(a1[i]-a2[i]-k+10)%10;k=1;}else{c[i]=(a1[i]-a2[i]-k)%10;k=0;}}for(i=len;i<l1;i++){if ((a1[i]-k)<0){c[i]=(a1[i]-k+10)%10;k=1;}else{c[i]=(a1[i]-k)%10;k=0;}}if(c[l1-1]==0)/*使得数组C中的前面所以0字符不显示了,如1000-20=0980--->显示为980了*/{len=l1-1;i=2;while (c[l1-i]==0)/*111456-111450=00006,消除0后变成了6;*/{len=l1-i;i++;}}else{len=l1;}}elseif(cmp(a1,a2)==(-1)){c[MAX-2]='-';len=l1;for(i=0;i<len;i++){if ((a2[i]-k-a1[i])<0){c[i]=(a2[i]-a1[i]-k+10)%10;k=1;}else{c[i]=(a2[i]-a1[i]-k)%10;k=0;}}for(i=len;i<l2;i++){if ((a2[i]-k)<0){c[i]=(a2[i]-k+10)%10;k=1;}else{c[i]=(a2[i]-k)%10;k=0;}}if(c[l2-1]==0){len=l2-1;i=2;while (c[l1-i]==0){len=l1-i;i++;}}else len=l2;}else if(cmp(a1,a2)==0){len=1;c[len-1]=0;}c[MAX-1]=len;return;}void mod(int a[MAX],int b[MAX],int *c)/*/c=a mod b//注意:经检验知道此处A和C的数组都改变了。

C语言加密与解密算法的实现与应用

C语言加密与解密算法的实现与应用

C语言加密与解密算法的实现与应用密码学是信息安全领域的重要分支之一,加密与解密算法是密码学中的核心概念。

在本文中,我们将讨论C语言中加密与解密算法的实现与应用,介绍几种常见的算法,并为读者提供实用的示例代码。

1. 对称加密算法对称加密算法是指加密和解密使用相同密钥的算法。

C语言中常用的对称加密算法有DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。

下面以AES算法为例进行介绍。

AES算法是一种高级加密标准,广泛应用于各种领域的数据保护中。

C语言中可以使用openssl库来实现AES算法的加密和解密操作。

以下为一个简单的AES加密和解密的示例代码:```c#include <openssl/aes.h>#include <string.h>int aes_encrypt(const unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *ciphertext) {AES_KEY aesKey;AES_set_encrypt_key(key, 128, &aesKey);AES_encrypt(plaintext, ciphertext, &aesKey);return 0;int aes_decrypt(const unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *plaintext) {AES_KEY aesKey;AES_set_decrypt_key(key, 128, &aesKey);AES_decrypt(ciphertext, plaintext, &aesKey);return 0;}int main() {unsigned char key[] = "0123456789012345";unsigned char plaintext[] = "Hello, World!";unsigned char ciphertext[128];unsigned char decryptedtext[128];aes_encrypt(plaintext, strlen((char *)plaintext), key, ciphertext);aes_decrypt(ciphertext, strlen((char *)ciphertext), key, decryptedtext);printf("Plaintext: %s\n", plaintext);printf("Ciphertext: %s\n", ciphertext);printf("Decrypted text: %s\n", decryptedtext);return 0;```2. 非对称加密算法非对称加密算法使用一对密钥,分别为公钥和私钥。

C语言加解密算法详解

C语言加解密算法详解

C语言加解密算法详解在当今信息化时代,数据的安全性和保密性变得愈发重要。

为了保护数据免遭不法分子的窃取或篡改,加密算法成为了一种常见的数据保护手段。

C语言作为一种广泛应用的编程语言,也提供了丰富的加解密算法库。

本文将详细介绍C语言中常用的加解密算法,并对其原理进行解析。

1. 凯撒密码凯撒密码是一种简单的字母替换加密算法,它通过将明文中的每个字母按照字母表中的顺序向后(或向前)移动固定的位置来进行加密。

例如,将明文字符'A'移动3个位置后,得到密文字符'D'。

解密时,只需将密文字符反向移动相同位置即可还原为明文字符。

凯撒密码的算法实现非常简单,可以使用C语言中的字符操作函数和条件语句来完成。

以下是一个使用凯撒密码加密字符串的示例代码:```c#include <stdio.h>void caesar_encrypt(char *str, int key) {int i = 0;while (str[i] != '\0') {if (str[i] >= 'A' && str[i] <= 'Z') {str[i] = ((str[i] - 'A') + key) % 26 + 'A';}else if (str[i] >= 'a' && str[i] <= 'z') {str[i] = ((str[i] - 'a') + key) % 26 + 'a';}i++;}}int main() {char str[100] = "Hello, World!";int key = 3;caesar_encrypt(str, key);printf("Encrypted string: %s\n", str);return 0;}```2. DES算法DES(Data Encryption Standard)是一种对称分组密码算法,使用56位的密钥对64位的数据进行加密和解密。

C语言中的加密与解密算法实现

C语言中的加密与解密算法实现

C语言中的加密与解密算法实现在计算机编程领域中,加密与解密算法的实现是非常重要的。

通过加密算法,可以将敏感数据进行保护,以防止未经授权的访问。

同时,解密算法则用于将加密过的数据恢复为原始数据。

本文将介绍C语言中加密与解密算法的实现方法,并探讨一些常用的加密算法。

一、加密算法的实现方法加密算法的实现可以采用C语言中的各种方法和技术。

下面列举了几种常用的加密算法实现方法:1. 移位加密算法移位加密算法是一种简单的加密算法,它通过将字符的ASCII码值向右移动若干位来实现。

例如,将字符'A'的ASCII码值向右移动1位,即可得到字符'B'的ASCII码值。

移位加密算法的实现如下:```cvoid encryptShift(char* message, int key) {int i = 0;while (message[i] != '\0') {message[i] = message[i] + key; // 向右移动key位i++;}}```2. 替换加密算法替换加密算法是通过将字符替换为其他字符来实现加密的。

替换加密算法可以使用预定义的映射表或通过自定义映射关系来实现。

例如,将字符'A'替换为字符'Z',将字符'B'替换为字符'Y',以此类推。

替换加密算法的实现如下:```cvoid encryptSubstitution(char* message) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = 'Z' - (message[i] - 'A'); // 替换为对应的字符}i++;}}```3. 数字加密算法数字加密算法主要用于加密数字,例如将手机号码、银行账号等敏感数字进行保护。

RSA加密解密算法c语言程序

RSA加密解密算法c语言程序

RSA加密解密算法c语言程序R S A加密解密算法c语言程序Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】#i n c l u d e<>#include<>#include<>!";printf("请输入您要发送的明文文件(小写英文表示):\n");printf("******************************************************\ n");gets(min_wen);printf("******************************************************\ n");printf("\n加密开始,请按要求操作。

\n\n");printf("请输入第一个大素数p:\n");while(1){scanf("%d",&p);if(Witness(2,p)==1){printf("您输入的第一个大素数 %d 符合要求\n",p);break;}elseprintf("您输入的 %d 不是素数,请重新输入:\n",p);}printf("请输入第二个大素数q:\n");while(1){scanf("%d",&q);if(Witness(2,q)){printf("您输入的第二个大素数 %d 符合要求\n",q);break;}elseprintf("您输入的 %d 不是素数,请重新输入:\n",q);}n=p*q; yn=(p-1)*(q-1);printf("请输入加密指数(整数)e,且0<e。

用C语言简单加密解密

用C语言简单加密解密

⽤C语⾔简单加密解密使⽤char表⽰的字符型数据,在本质上与我们前⾯介绍的整型数据并⽆太⼤的区别,只是char类型占⽤的内存字节数更⼩,能够表⽰的数据范围更⼩⽽已。

在使⽤上,char被专门⽤来表⽰C语⾔的字符集中的各种字符,不要把它当成⼀个整型数据类型来使⽤。

对于字符类型,我们常常利⽤它来处理字符串中的单个字符或者是实现⼀些字符游戏。

例如,我们可以对字符串中的单个字符进⾏运算,实现字符串的简单加密:#include <stdio.h>#include <string.h> // strlen()函数所在的头⽂件#include <ctype.h> // isalpha()函数所在的头⽂件int main(){// 定义⼀个明⽂字符串char msg[] = "This is C program!";int i = 0 ;// 逐个遍历字符串中的字符,对其进⾏处理for(i=0; i<strlen(msg); i++){// 获得字符串中的当前字符char cur = msg[i];// 判断当前字符是否是字母字符if(isalpha(cur))// 对字母字符进⾏简单加密处理,然后重新写回字符串msg[i] = cur +1;}// 输出加密后的字符串printf("the encrypted message is: %s\n",msg);//解码for(i=0; i<strlen(msg); i++){char c =msg[i];if(isalpha(c)){msg[i] = c - 1;}}printf("the decrypted message is: %s\n",msg);return0;}这样实现了C语⾔的简单加密和解密!。

C语言代码破解系统密码

C语言代码破解系统密码

C语言代码破解系统密码自己编写C语言代码破解系统密码------众所周知,如果自己忘了系统密码,就只能重装系统或者去买工具软件进行软件的破解。

但很多都局限于应用工具,那我们学C的能自己创造一个工具吗?回答当然是Yes, C 和汇编是程序开发中的王者,无所不能,当然了,得你自己去足够的内力才能发挥他的功能。

现在我们就进入实战部份。

大家都知道,在windows 系列的操作系统中也包括win7 ,他们都自带了一个utilman.exe 的工具,此工具很难得的是在开机启动到windows后,都会常驻在内存中,随时都可以用win键+U 启动,在还没有进入登陆用户的时候,那我们猜一下,到底我们还没有登陆的时候,执行的操作是以什么权限在运行的呢?我也不知道,经过测试,可能是administrator 用户,也有可能是操作系统的一个隐藏超级用户。

反正在这个环境中,我们如果不知道任何的用户信息,那现在是不是就可以实行我们的方法了?嘿嘿~ 刺激的旅程现在开始!!1 ,打开C语言编译器:输入如下代码:#include "stdio.h"#include "stdlib.h"int main(){system("net user administrator \"\""); // 千万要注意转意,如果此文件生成了.exe 文件,那你电脑上的超级用户的密码将为空。

return 0; // 这里会用到一些DOS的命令,下一篇文章将进行net user 命令的详解,和使用}2 。

生成好的文件我们把他改名叫 utilman.exe3. 将utlman.exe 拷贝到c:\windows\system32 下面 (xp 还要拷贝到c:\windows\system32\dllcache下) 可以使用任何方法完成这步操作1)在其它用户可以使用的时候,可以进入其它用户后把此文件拷贝过去2)进入开始启动到DOS将utilman.exe 拷贝到上面所说的目录中去4. 完成上一步操作以后,进入到windows 登陆的界面,然后拼命的按下Win + U 键,然后重启电脑以后,你的系统管理员密码将完全清空,你可以作任何的操作,经测试:在windows2000 / xp /wi7 下面正常运行,且能完成工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档