C 使用异或(xor)加密/解密文件

2023-05-16

C 使用异或(XOR)加密/解密文件

之前写过一篇《php 使用异或(XOR)加密/解密文件》,但php执行的速度很慢,因此这次使用C重写,速度有很大的提高。


xor_encrypt.c

/** XOR 加密/解密文件 */

#define TRUE 1
#define FALSE 0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>     // 如果在/usr/include/找不到,可以在/usr/include/sys/复制过去


// 输出信息
void msg_log(char *str);

// 判断文件是否存在
int file_exists(char *filename);


// 主函数
int main(int argc, char *argv[]){

    int keylen, index=0;
    char *source, *dest, *key, fBuffer[1], tBuffer[20], ckey;

    FILE *fSource, *fDest;

    source = argv[1]; // 原文件
    dest = argv[2];   // 目的文件
    key = argv[3];    // 加密字串

    // 检查参数
    if(source==NULL || dest==NULL || key==NULL){
        msg_log("param error\nusage:xor_encrypt source dest key\ne.g ./xor_encrypt o.txt d.txt 123456");
        exit(0);
    }

    // 判断原文件是否存在
    if(file_exists(source)==FALSE){
        sprintf(tBuffer,"%s not exists",source);
        msg_log(tBuffer);
        exit(0);
    }

    // 获取key长度
    keylen = strlen(key);

    fSource = fopen(source, "rb");
    fDest = fopen(dest, "wb");

    while(!feof(fSource)){
        
        fread(fBuffer, 1, 1, fSource);    // 读取1字节
        
        if(!feof(fSource)){
            ckey = key[index%keylen];     // 循环获取key
            *fBuffer = *fBuffer ^ ckey;   // xor encrypt
            fwrite(fBuffer, 1, 1, fDest); // 写入文件
            index ++;
        }
    
    }

    fclose(fSource);
    fclose(fDest);

    msg_log("success");

    exit(0);
}

//输出信息
void msg_log(char *str){
    printf("%s\n", str);
}

// 判断文件是否存在
int file_exists(char *filename){
    return (access(filename, 0)==0);
}

这张图如果使用php来处理需要 2秒 左右,但用C处理只需要 130毫秒

fdipzone@ubuntu:~/C$ gcc -o xor_encrypt xor_encrypt.c
fdipzone@ubuntu:~/C$ time ./xor_encrypt 1280.jpg 1280en.jpg '@#$%^&*()_DFGHJKadsklfjasdf'
success

real	0m0.139s
user	0m0.060s
sys	0m0.070s


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 使用异或(xor)加密/解密文件 的相关文章

  • php 使用异或(XOR)加密/解密文件

    php 使用异或 xff08 XOR xff09 加密 解密文件 原理 xff1a 将文件每一个字节与key作位异或运算 xff08 XOR xff09 xff0c 解密则再执行一次异或运算 代码如下 xff1a lt php source
  • 使某些整数的异或为零所需的最小总和

    这是一个涉及算法和按位异或运算的问题 我们被给予x1 x2 x3 xn P 其中星号 运算表示 XOR 按位 运算 并且x1 至 xn 为正整数 P也是正整数 我们需要求最小值 a1 a2 a3 an 这样这个关系成立 gt x1 a1 x
  • 两个短整数的异或

    我正在计算XOR of two short integers using XOR 操作员以传统方式 下面是方法 short a 197 short b 341 short y short a b 然而 异或总是返回整数 但在我的例子中 输入
  • 如何在Python中对两个包含十六进制数字的字符串进行异或?

    我在网上寻找答案 但似乎没有一个能以我的方式解决我的问题 我知道 我很挑剔 D 事情是这样的 我使用字符串类型来存储两个十六进制数字 因为 python 中的默认整数类型对于我的目的来说不够长 例如这样 S1 315c4eeaa8b5f8a
  • Swift 5 中的异或?

    我正在尝试在 Swift 5 中执行 XOR 操作 文档似乎没有明确提到使用两个布尔值进行此操作 https docs swift org swift book LanguageGuide AdvancedOperators html ht
  • 为什么java hashCode()中经常使用XOR,而其他按位运算符却很少使用?

    我经常看到这样的代码 int hashCode return a b Why XOR 在所有位操作中 XOR 具有最好的位混洗属性 这个真值表解释了原因 A B AND 0 0 0 0 1 0 1 0 0 1 1 1 A B OR 0 0
  • Swift 简单异或加密

    我正在尝试在 Swift 中执行一个简单的异或加密例程 我知道这不是一个特别安全或很好的方法 但我只是需要它简单 我知道代码是如何在 Javascript 中实现的 只是在将其转换为 Swift 时遇到了麻烦 JavaScript func
  • EXCEL 多位异或

    我有两个单元格 其中包含一串位 0111010 和 0101011 我想将两者异或在一起 以便得到的单元格为 0010001 我知道你可以用它来表示布尔值 OR AND A1 NOT A2 AND A2 NOT A1 但它不适用于一串位 您
  • 如何在 C 中对单个数字的所有位进行异或?

    有没有一种简单的方法将单个数字的所有位异或在一起 即 C 中的一元异或 具有以下效果的东西 result 0x45 0 1 0 0 0 1 0 1 1 result 0x33 0 0 1 1 0 0 1 1 0 GCC 为此内置了一个 in
  • 查询的最小异或

    我在一次采访中被问到以下问题 给定一个数组A with N元素和数组B with M元素 对于每个 B X 返回 A I 其中 A I 和 B X 的 XOR 最小 例如 Input A 3 2 9 6 1 B 4 8 5 9 Output
  • 使用神经网络进行异或 (Matlab)

    所以 我希望这是我正在做的一件真正愚蠢的事情 并且有一个简单的答案 我正在尝试训练 2x3x1 神经网络来解决 XOR 问题 它不起作用 所以我决定深入了解发生了什么 最后 我决定自己分配权重 这是我想出的权重向量 theta1 11 0
  • 如何使用相同的函数对 C 中的字符串进行异或加扰并再次返回?

    我正在尝试混淆程序中的字符串 目前 我只有一个简单的字符串反转工作 我希望能够对数据执行 XOR 加扰以使其更加安全 但是我尝试过的方法不起作用 使用相同的函数和输入类型来解码字符串 这对于字符串反转来说没有问题 因为它只是反转回来 但是可
  • 转换后的数组中的第 K 个元素

    我在最近的采访中遇到了这个问题 给定一个数组A长度N 我们应该回答Q查询 查询表格如下 Given x and k 我们需要创建另一个数组B具有相同的长度使得B i A i x where 是异或运算符 对数组进行排序B按降序排列并返回B
  • XOR 中的 Exclusive 到底意味着什么?

    也许这对每个人来说都是显而易见的 但有人可以解释 XOR 或异或 的名字从何而来吗 这个词是什么意思独家的实际意思 这并不重要 但从早上起它就一直萦绕在我的脑海里 OR 0 0 0 0 1 1 1 0 1 1 1 1 XOR 0 0 0 0
  • PHP 按位异或 vs. JavaScript 按位异或

    我正在尝试找到一种方法来制作PHP Bitwise XOR结果与以下结果相符JavaScript Bitwise XOR 我遇到了这个问题的不同问题 但都没有答案 这里有几个 Javascript 和 PHP 异或等效项 https sta
  • XOR 加密有什么问题?

    我编写了一个简短的 C 程序来对文件进行 XOR 加密 我可以将其用于一些个人文件 如果它被破解 那没什么大不了的 我只是防止临时查看者 基本上 我采用 ASCII 密码并重复将密码与文件中的数据进行异或 但现在我很好奇 如果有人想破解这个
  • 将字母与空格字符异或

    为什么将任何字母与空格字符进行异或会改变字母的大小写 是否有历史原因 即 a 异或 A F 异或 f 等 或者这只是巧合 假设字符是 ASCII 或 unicode 编码的 我确信通过改变一个位就可以改变这种情况是故意的 这将使早期的软件更
  • Prolog 实现 and/2、or/2、nand/2、nor/2、xor/2 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在序言中实现以下谓词并将它们用于真值表 and 2 or 2 nand 2 nor 2 xor 2 也许有人可以告诉我如何实现和
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • 在 Java 中,三个 true 输入的 XOR 返回 true。为什么?

    下面的代码 System out println 1 0 0 true false false System out println 1 0 1 true false true System out println 1 1 0 true t

随机推荐

  • ubunut 管理开机程序

    安装 sysv rc conf sudo apt get install sysv rc conf 安装完成后输入命令 xff0c 可以管理开机程序 sudo sysv rc conf 带 X 的都是开机启动 xff0c 移动到要修改的位置
  • VC中TRACE()的用法,终于学会了点皮毛,好累!

    个人总结 xff1a 最近看网络编程是碰到了TRACE语句 xff0c 不知道在哪里输出 xff0c 查了一晚上资料也没找出来 xff0c 今天终于在CSDN上找到了 xff0c 真是个高地方啊 xff0c 方法如下 xff1a 1 在MF
  • php Cookies 操作类

    Cookies 操作类 功能 xff1a 1 保存 xff0c 读取 xff0c 更新 xff0c 清除cookies数据 2 可设置前缀 3 强制超时控制 4 cookies数据可以是字符串 xff0c 数组 xff0c 对象等 Cook
  • php 密码生成类

    php 密码生成类 功能 xff1a 1 可设定密码长度 2 可设定要生成的密码个数 xff0c 批量生成 3 可以指定密码的规则 xff0c 字母 xff0c 数字 xff0c 特殊字符等 GeneratePassword class p
  • php main 与 iframe 相互通讯类(同域/跨域)

    main 与 iframe 相互通讯类 之前写过一篇 iframe与主框架跨域相互访问方法 介绍了main与iframe相互通讯的原理 不了解原理的可以先看看 今天把main与iframe相互通讯的方法封装成类 主要有两个文件 JS Fra
  • php 异步调用方法

    php 异步调用方法 客户端与服务器端是通过HTTP协议进行连接通讯 xff0c 客户端发起请求 xff0c 服务器端接收到请求后执行处理 xff0c 并返回处理结果 有时服务器需要执行很耗时的操作 xff0c 这个操作的结果并不需要返回给
  • php 根据url自动生成缩略图,并处理高并发问题

    服务器生成缩略图的时机一般分为两种 xff1a 1 上传文件时生成 优点 xff1a 上传时就已经生成需要的缩略图 xff0c 读取时不需要再判断 xff0c 减少cpu运算 缺点 xff1a 当缩略图尺寸变化时或新增尺寸时 xff0c 需
  • MemcacheQ 安装与使用

    MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器 官网地址 xff1a http memcachedb org memcacheq 特点 xff1a 1 简单易用 2 处理速度快 3 可创建多条队列 4 并发性能高 5
  • 深入Mysql字符集设置

    基本概念 字符 Character 是指人类语言中最小的表义符号 例如 A 39 B 39 等 xff1b 给定一系列字符 xff0c 对每个字符赋予一个数值 xff0c 用数值来代表对应的字符 xff0c 这一数值就是字符的编码 Enco
  • Rsync 安装与使用

    Rsync 是一个远程数据同步工具 xff0c 可以通过 LAN WAN 快速同步多台主机间的文件 Rsync 使用 34 Rsync演算法 34 来使本地和远程两个主机之间的文件同步 这个算法只传送两个文件的不同部分 xff0c 而不是每
  • php 字符串压缩方法比较

    php 提供的字符串压缩方法有 1 gzcompress Compress a string This function compress the given string using the ZLIB data format 2 gzen
  • php 生成短网址

    php 生成短网址 原理 xff1a 1 将原网址做crc32校验 xff0c 得到校验码 2 使用sprintf 39 u 39 将校验码转为无符号数字 3 对无符号数字进行求余62操作 xff08 大小写字母 43 数字等于62位 xf
  • debian7安装和配置小经验

    好久没碰linux了 xff0c 这回 捡 了台电脑测试玩 xff0c 发现过去的基本都忘记了 xff0c 拳不离手 曲不离口 xff0c 古人诚吾不欺 linux版本选择我比较熟悉debian xff0c 因为debian装包好方便 xf
  • ApacheBench 测试性能并使用GnuPlot绘制图表

    Apache Bench 是web性能测试工具 xff0c 功能强大 但输出的结果只是数字形式 xff0c 不容易看到数据的变化 因此 xff0c GnuPlot 的强大绘制功能正好可以弥补Apache Bench这方面的不足 关于Apac
  • VM ubuntu ping unknow host 解决方法

    例如网关地址为 xff1a 192 168 1 1 route add default gw 192 168 1 1 sudo vim etc resolv conf 在 etc resolv conf 中加入 Generated by N
  • apache日志分析及系统cpu,内存,负载情况监控

    1 根据Apache Log xff0c 获取当天秒并发数最多的记录 tail 10000 demo fdipzone com access log 2014 01 16 01 cut d 34 34 f 2 awk 39 print 1
  • Apache 搭建HTTPS Virtual Host

    Apache 搭建HTTPS Virtual Host 1 创建SSL证书 首先需要安装openssl xff0c linux系统默认已安装 xff0c 如没有则用以下命令安装 xff1a sudo apt get install open
  • MongoDB 主从同步设置

    MongoDB 主从同步设置 关于MongoDB的安装及启动参数说明可以参考我之前转载的 Ubuntu安装MongoDB 与 Mongodb启动命令mongod参数说明 主从设置 Master xff1a 192 168 111 103 P
  • php Timer 页面运行时间监测类

    php Timer 页面运行时间监测类 xff0c 可按不同key监测不同的运行时间 Timer class php lt php Timer class 计算页面运行时间 可按不同key计算不同的运行时间 Date 2014 02 28
  • C 使用异或(xor)加密/解密文件

    C 使用异或 XOR 加密 解密文件 之前写过一篇 php 使用异或 xff08 XOR xff09 加密 解密文件 xff0c 但php执行的速度很慢 xff0c 因此这次使用C重写 xff0c 速度有很大的提高 xor encrypt