Hej! Kan det vara så att den tolkar 0 i strängen som anslutning av strängen. Eftersom resultatet av två identiska tecken blir ju 0. Var sker felet? > Kan det vara så att den tolkar 0 i strängen somBasalt fel i XOR-krypteringstest
Jag har gjort ett testprogram som skall testa en XOR-kryptering på strängen "hejsan ju" med nyckel "hej"...men det blir galet hur jag än gör. Det är något basalt fel jag gör antar jag, men jag ser det inte! Något med char-arrayer o tilldelning eller så...jag vet inte...Så här ser koden ut iallafall:
tacksam för svar (i okrypterad form (-:)
mvh,/ek
<code>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <pwd.h>
#include <fcntl.h>
#include <limits.h>
#include "mcrypt.h"
unsigned char* xorcrypt(unsigned char *src, size_t srclen, const unsigned char *key) ;
int main (int argc, char *argv[])
{
char shm[]="hejsan ju";
char * nyckel="hej";
printf("Original:%s\n", shm);
xorcrypt((unsigned char*) shm, (size_t) 9,(unsigned char*) nyckel);
}
/*
* Name: xorcrypt
* Purpose: encrypt data
* Parameters: src: buffer with data to encrypt
* srclen: # of bytes in buffer
* key: encryption key (\0-terminated ASCII string)
*/
unsigned char* xorcrypt(unsigned char *src, size_t srclen, const unsigned char *key)
{
int i, keylen = (src && key) ? strlen((const char*)key) : 0;
if (!keylen)
return src;
printf("Source: %s\n",src);
for (i = 0; i < srclen; ++i)
{
printf("i %d\n",i);
printf("sorcelen %d\n",(int) srclen);
printf("sorce %c\n",src[i]);
printf("key %c\n",key[i%keylen]);
src[i] ^= key[i%keylen];/*Själva krypteringen*/
printf("Resultat:%c\n", src[i]);/*Skriv ut krypterat tkn*/
}
printf("Krypterat:\n",src);/*Skriv ut krypterad sträng*/
return src;
}
</code>Sv: Basalt fel i XOR-krypteringstest
Sv: Basalt fel i XOR-krypteringstest
Det känns som om du har med onödigt mycket olika typer och typomvandlingar.
Är det kompilatorfel eller ett logiskt fel?
/Niklas JanssonSv: Basalt fel i XOR-krypteringstest
> anslutning av strängen. Eftersom resultatet av
> två identiska tecken blir ju 0.
Ja, hade han försökt skriva ut variabeln src som en sträng så hade inte det gått, för den tar ju - som du säger - slut på första tecknet eftersom det blir en nolla i det här fallet.
Men nu skriver han inte ut src som en sträng, utan han skriver tecken för tecken istället, och då går det bra.