简单的异或加密

利用一个简单的事实:

x ^ y ^ z 得到 a

那么 a ^ z ^ y 就可以得到 x,或者 a ^ y ^ z 也可以得到 x

加密:提供一个key.txt和input.txt,key.txt装你的密钥,比如:abc123,input.txt装原文(可以包含中文)

解密:key.txt内容仍然是密钥,或者key.txt的内容修改为321cba,input.txt装密文

最高支持密钥长度64位

利用了“输入输出重定向”

这个的缺点在于很可能你加密的密钥是abc123,你输入的密钥是aBc123、ABC123甚至vcx123也能解密,也就是说这货并不具备实用性。对于更多的内容请参考加密解密相关的书籍

main.c

#include <stdio.h>

#include "20/xor.h"

int main(int argc, char *argv[]) {
    _xor();
    return 0;
}

xor.h

#ifndef XOR_H
#define XOR_H

/**
    Using a series of characters to
    xor encrypt your text.
    key.txt is required by this program
    to supply key word.
    for example, if you use ‘abc123‘ as
        the key word to encrypt your text,
        you‘ll need to use ‘321cba‘ to
        decrypt the text.
    You‘ll need to use input-redirect
    and output-redirect to make this
    work for your input file and output
    file.
    Maximum supports 64-character key.
*/
void _xor();

#endif // XOR_H

xor.c

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

#include "xor.h"

#define MAX_KEY_LEN 64

void _xor() {
    char key[MAX_KEY_LEN];
    FILE *fp;
    fp = fopen("key.txt", "r");
    if (fp == NULL) {
        printf("CANNOT OPEN key.txt\n");
        return;
    }
    // read key word
    char ch;
    while(isspace(ch = getc(fp))) // skip leading white-characters
            ;
    int j = 0;
    for (int i = 0; i < MAX_KEY_LEN && ch!=EOF; i++) {
        if (ch!=‘\n‘ && ch!=‘\r‘) {
            key[j++] = ch;
        }
        ch = getc(fp);
    }
    // encrypt/decrypt
    int orig_char, new_char;
    while ((orig_char = getchar())!=EOF) {
        for (int i = 0; i < j; i++) {
            new_char = orig_char ^ key[i];
        }
        putchar(new_char);
    }

}

run.bat

xor.exe <input.txt >out.txt
时间: 2024-09-30 03:31:20

简单的异或加密的相关文章

lua简单地异或加密文件

用lua简单地异或加密文件,注意解密的key是加密key的倒序: 1 require 'bit' 2 3 local encode = function(inpath, outpath, key) 4 local inf = assert(io.open(inpath, "rb")) 5 local outf = assert(io.open(outpath, "wb")) 6 7 if (type(key) ~= "string") or (s

C# 简单的异或加密文本文件或字符串

一.加解密字符串 1.加密方法:将原字符串与加密字符进行异或 1 private char[] Encrypt(string content, string secretKey) 2 { 3 char[] data = content.ToCharArray(); 4 char[] key = secretKey.ToCharArray(); 5 for (int i = 0; i < data.Length; i++) 6 { 7 data[i] ^= key[i % key.Length];

谈谈异或加密

0. 前言 本文包括如下几个内容: 异或算法 异或加密 两个整数交换问题 1. 异或算法 异或是数字逻辑中的基本概念,也是每种编程语言都支持的基本运算.基本原理就是,对于数字1和0有如下的运算公式: 1 ^ 1 = 0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 很自然地,这个运算可以扩展到一长串码流上. 更常见的是字节一级或整数的异或运算,可以参考相应的编程语言的相关介绍. 2. 异或加密 异或加密是最简单的一种加密方法,简单来讲,假定有一串码流A,然后可以用key进行加密,把

CBrother异或加密与C++异或加密函数

CBrother脚本异或加密与C++异或加密函数 异或对于数据加密来说是最简单的方式,在一般的安全性要求不是非常高的地方,异或加密是最好的选择. C++异或加密代码 1 int g_PWD = 0xffee00aa; //密码 2 void XORBuf(char *data,int len) 3 { 4 int *buf = (int *)data; 5 int num = len >> 2;//够4个字节的按整形异或 6 for (int i = 0 ; i < num ; i++)

.Net下简单地实现MD5加密

 1.WebView 显示进度条 在onCreate事件里写: [java] view plaincopy WebView myWebView = (WebView) findViewById(R.id.webView1); final Activity activity = this; myWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int prog

Java实现异或加密

/** * 异或加密 * * @param strOld * 源字符串 * @param strKey * 密钥 * @return 加密后的字符串 */ public static String encrypt(String strOld, String strKey) { byte[] data = strOld.getBytes(); byte[] keyData = strKey.getBytes(); int keyIndex = 0; for (int i = 0; i < strO

异或加密原理

加密原理 因为: 1. A xor B xor C = (A xor B) xor C = A xor (B xor C) 2. A xor B xor B = A 所以有: A xor B xor B = (C= A xor B) xor B = C xor B = A 公开加密后的值C,保留key B ,c xor B 得到原始数据A #PYTHON 2.7 #coding: utf-8 ''' xor operator lab ''' def xor_encode(original,key

字符串异或加密

/** *  字符串异或加密 * *  @param oldStr 被加密的字符串 *  @param x      字符偏移量 * *  @return 加密后的字符串 */ - (NSString *)getCharArrayUsingString:(NSString *)oldstr withCharOffset:(int)x { if (nil == oldstr || [@"" isEqualToString:oldstr]) { return @"";

Python异或加密字符串

import os import sys import struct def enc(path, key): path_ret = "" for i in range(0, len(path)/4): path_ret += struct.pack("<L", struct.unpack("<L", path[i*4 : (i*4)+4])[0] ^ key) return path_ret print enc("danie