linux c最简单的加密程序

最初的密码程序是在Hirst First c里面看到的,大概内容如下:
对待加密的字符串的每一个字符和某个数值进行一次按位异或得到密文,再进行一次按位异或得到明文。

补充知识:按位异或的结果是“同位得1,异位得0”。
比如数值2和数值1进行按位异或的情况如下:
2对应的二进制表示:10
1对应的二进制表示:01
2^1的结果最终表示:00

这个时候再把2^1的结果和1进行按位异或
01
00
10

原文的加密程序如下:

#include<stdio.h>

//加密解密程序
void encrypt(char *message)
{
    while (*message) {
        //对message的每一个字符和31进行按位异或
        *message = *message ^ 31;
        message++;
    }
}

int main()
{
    char s[] = "Hello qizexi";

    //运行一次:进行加密
    encrypt(s);
    printf("加密:%s\n", s);
    //再运行一次是解密
    encrypt(s);
    printf("解密:%s\n", s);

    return 0;
}

encrypt1.c

既然可以和某个数值进行按位异或进行加密,那么是否可以和某个字符串进行按位异或呢,答案是可以。
原理如下:待加密的密文的每一个字符和一个密匙(任意字符串) 的每一个字符分别进行一次按位异或进行加密解密即可。
最终按密匙加密的程序如下:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>

//加密解密程序
void encrypt(char *message, const char *key)
{
    int i;
    int len = strlen(key);
    while (*message) {
        //对message的每一个字符和31进行按位异或
        for (i = 0; i < len; i++) {
            *message = *message ^ (int)key[i];
        }
        message++;
    }
}

int main()
{
    //密文
    char s[] = "Hello qizexi";
    //密匙
    char *key = "[email protected]";

    //运行一次:进行加密
    encrypt(s, key);
    printf("加密:%s\n", s);
    //再运行:进行解密
    encrypt(s, key);
    printf("解密:%s\n", s);

    return 0;
} 

encrypt2.c

怎么样是不是粉简单,感觉在你的项目中引入这个程序吧。

时间: 2024-10-10 14:36:26

linux c最简单的加密程序的相关文章

Linux终端下简单的登录程序 密码不回显

在Linux进行登录是输入密码不会被回显,所以我也写了个简单的登入程序,使得在输入密码时不再进行回显. #include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <stdbool.h> #define USER_NAME &qu

Python基础教程3——教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)

因为发现基础教程我之前推荐的那个网站就已经很完善了,就不重复写了,所以本汪来一起做练习吧. 一.加密原理 记得当时我学c++的时候,学到输入输出流的时候,当时王老师就教我们写了一个小的加密程序,所以这次既然学习了Python这个小练习当然不能放过(其实这个加密程序我用c++,java都写过可以说也算比较熟了).加密原理就是循环读取文件每个字节,然后进行相应的加密运算后就是加密操作了,解密时候进行逆运算就是解密操作了. 比如我们读取文件的第一个字节数据是20(读取出来的每位数据为0~255,因为8

Linux环境下部署完JDK后运行一个简单的Java程序

前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version"命令是否有正确的内容打印,也许这并不具备太大的说服力.可能能够运行起一个正确的java程序来,不管从感性角度还是理性角度来说,都会有一个更好的认识. 所以本文写一段很简单的java代码,并且在Linux环境下编译运行,以证明JDK部署得确实没有问题. 代码验证JDK部署是否正确 1.级联建立两个目录 首

Linux下使用pdb简单调试python程序

python自带调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__main__': print 'debug starting...' print '*' * 10 print 'debug ending-' num = 100 s = func(num) print s 在python文件中不引用pdb库,可以在执行python文件的时候,加上参数: python -m

制作URL以GET方式提交的简单加密程序

首先我们用到的是 DESCryptoServiceProvider 类 对此微软给出的解释是 定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象.无法继承此类. 接下来是接受参数页面的方法: using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; using System.Web;

【Java】Swing+IO流实现一个简单的文件加密程序

EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class EncryptService { // 默认密匙路径 private static String DEFAULT_KEY_URL = ".//KEY"; // 临时文件路径 private static String

Linux系统学习笔记之 1 一个简单的shell程序

不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步:创建一个包含命令和控制结构的文件 第二步:修改这个文件的权限使它可以执行. 使用chmod u+x 第三步:执行shell sh /test/example.sh Shell变量 变量:是shell传递数据的一种方法,用来代表每个取值的符号名 shell有两类变量:临时变量和永久变量 临时变量是sh

《Linux内核分析》MOOC课程 反汇编一个简单的C程序,分析汇编代码

一个简单c程序 分析一个简单的c程序 main.c 如下图: 用命令 gcc –S –o main.s main.c -m32编译成汇编文件.在汇编文件中有许多的虚指令并不会形成机器指令,为了使分析简单我们把大部分去掉: 得到如下图所示: 栈的介绍 APUE中指出每一个c程序,都有一个独立的地址空间,在内存中的典型布局如下: 对栈的操作和我们在数据结构中的栈的操作是类似的,ebp,esp(具体名称与cpu体系结构相关) 这两个寄存器直接与栈的操作相关. 栈地址是从高到低的方向分配的. 开始一个新

Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序

自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH  网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条: sudo apt-get install openssh-s