尽管我经常使用C++,但我仍在努力解决C语言之间的差异(主要是在字符串方面)。
你能向我展示一个简单的单一函数,它使用XOR比较用密钥加密消息吗?
谢谢--
编辑: key和message都是char*
发布于 2011-11-10 07:05:57
好吧,我花了一分钟的时间想出了这个(只有模糊的测试):
#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分配并返回一个新字符串,因此调用程序有责任在完成后释放该字符串。
发布于 2011-11-10 07:05:30
C非常接近汇编语言,所以这个例子很简短:
while (*string)
*string++ ^= key;假设char *string;和char key。
发布于 2011-11-10 07:29:04
为了它的价值,将@ott-- & @Tim的答案组合起来形成Xortron。
#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;
}https://stackoverflow.com/questions/8072868
复制相似问题