首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的XOR算法

简单的XOR算法
EN

Stack Overflow用户
提问于 2011-11-10 06:51:40
回答 3查看 18.9K关注 0票数 2

尽管我经常使用C++,但我仍在努力解决C语言之间的差异(主要是在字符串方面)。

你能向我展示一个简单的单一函数,它使用XOR比较用密钥加密消息吗?

谢谢--

编辑: key和message都是char*

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-10 07:05:57

好吧,我花了一分钟的时间想出了这个(只有模糊的测试):

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * xorencrypt(char * message, char * key) {
    size_t messagelen = strlen(message);
    size_t keylen = strlen(key);

    char * encrypted = malloc(messagelen+1);

    int i;
    for(i = 0; i < messagelen; i++) {
        encrypted[i] = message[i] ^ key[i % keylen];
    }
    encrypted[messagelen] = '\0';

    return encrypted;
}

int main(int argc, char * argv[]) {
    char * message = "test message";
    char * key = "abc";

    char * encrypted = xorencrypt(message, key);
    printf("%s\n", encrypted);
    free(encrypted);

    return 0;
}

请注意,函数xorencrypt分配并返回一个新字符串,因此调用程序有责任在完成后释放该字符串。

票数 9
EN

Stack Overflow用户

发布于 2011-11-10 07:05:30

C非常接近汇编语言,所以这个例子很简短:

代码语言:javascript
复制
while (*string)
    *string++ ^= key;

假设char *string;char key

票数 4
EN

Stack Overflow用户

发布于 2011-11-10 07:29:04

为了它的价值,将@ott-- & @Tim的答案组合起来形成Xortron。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *xor(char *string, const char *key)
{
    char *s = string;
    size_t length = strlen(key), i = 0;
    while (*s) {
            *s++ ^= key[i++ % length];
    }
    return string;
}

int main(int argc, char **argv)
{
    const char *key = "abc";
    if (argc < 2) {
            fprintf(stderr, "%s: no input\n", argv[0]);
            return EXIT_FAILURE;
    }
    printf("%s\n", xor(xor(argv[1], key), key));
    return EXIT_SUCCESS;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8072868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档