メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcVernam.c

説明を見る。

    00001
    00007 #define DKUTIL_C_VERNAM_C
    00008 #include "dkcVernam.h"
    00009 #include "dkcMath.h"
    00010 #include "dkcStdio.h"
    00011
    00012
    00013
    00014
    00015 static WINAPIV dkcRandomV(ULONG *seed,ULONG Max_){
    00016     return dkcRandom(seed,Max_);
    00017 }
    00018
    00019 void WINAPI dkcVernamEncrypt(BYTE *buffer,size_t size,const BYTE *key,size_t keysize,
    00020                                                          ULONG seed,DKC_VERNAM_F_TYPE ff)
    00021 {
    00022     size_t i;
    00023     int pos;
    00024     if(NULL==ff){
    00025         ff = dkcRandomV;
    00026     }
    00027     for(i=0;i<size;i++){
    00028         pos = ff(&seed,keysize);
    00029         buffer[i] ^= key[pos];
    00030     }
    00031 }
    00032
    00033 /*
    00034 static int WINAPI dkcVernamEncrypt2_Base(BYTE *buffer,size_t size,const BYTE *key,size_t keysize,
    00035                                                             const char *op)
    00036 {
    00037     size_t i,j,k;// i=buffer j = key k = op
    00038     size_t opl = strlen(op);
    00039
    00040     for(i=0,j=0,k=0;
    00041         i<size;
    00042         i++,j++,k++)
    00043     {
    00044         if(k<opl){
    00045             k = 0;
    00046         }
    00047         if(j<keysize){
    00048             j = 0;
    00049         }
    00050         switch(op[k]){
    00051         case '+':
    00052             buffer[i] += key[j];
    00053             break;
    00054         case '-':
    00055             buffer[i] -= key[j];
    00056             break;
    00057         case '^':
    00058             buffer[i] ^= key[j];
    00059             break;
    00060         default:
    00061             return edk_FAILED;
    00062         }
    00063     }
    00064     return edk_SUCCEEDED;
    00065 }
    00066 */
    00067
    00068
    00069
    00070 void WINAPI dkcEasyVernamEncrypt(BYTE *buffer,size_t size,ULONG seed,DKC_VERNAM_F_TYPE ff)
    00071 {
    00072     size_t i;
    00073     BYTE num;
    00074     if(NULL==ff){
    00075         ff = dkcRandomV;
    00076     }
    00077     for(i=0;i<size;i++){
    00078         num = (BYTE)(ff(&seed,UCHAR_MAX));
    00079         buffer[i] ^= num;
    00080     }
    00081 }
    00082
    00083
    00084
    00085
    00086
    00087
    00088
    00089