本人近期在做國創項目,其中需要使用重覆碼,並且使用經過重覆碼編碼後的數據進行加密。 問題是重覆碼編碼後再讀取就亂碼了,而且我不知道怎麼樣可以讀取出二進位數據 重覆碼代碼如下: #include<iostream> #include<stdlib.h> #include<string> #includ ...
本人近期在做國創項目,其中需要使用重覆碼,並且使用經過重覆碼編碼後的數據進行加密。
問題是重覆碼編碼後再讀取就亂碼了,而且我不知道怎麼樣可以讀取出二進位數據
重覆碼代碼如下:
- #include<iostream>
- #include<stdlib.h>
- #include<string>
- #include<fstream>
- using namespace std;
- static unsigned int inbfr,outbfr;
- static FILE *outfile,*infile;
- static int incnt,outcnt,mask;
- voidinit()
- {
- outbfr=0;
- outcnt=8;
- inbfr=0;
- incnt=8;
- mask=0x80; //10000000
- }
- intgetbit()
- {
- int bitval;
- bitval=inbfr&mask; //bitval0000000
- incnt--; //7
- mask >>= 1; //01000000
- bitval >>= incnt;
- if (incnt==0)
- {
- inbfr=fgetc(infile);
- incnt=8;
- mask=0x80;
- }
- return bitval; //0000000bitval
- }
- voidputbit( int bitval)
- {
- outbfr = (outbfr<<1)&255; //00000000
- outbfr |= bitval; //0000000bitval
- outcnt --;
- if (outcnt==0)
- {
- fputc(outbfr,outfile);
- outcnt = 8;
- }
- }
- voidalignbits()
- {
- if (outcnt!=8)
- {
- for (int i=0;i<outcnt;i++)
- putbit(0);
- }
- }
- voiddecode()
- {
- int n = 3;
- int bitsum;
- if ((infile = fopen("ciphertext.txt", "rb")) == NULL)
- {
- printf("cannot open infile!!!\n");
- exit(0);
- }
- if ((outfile = fopen("decryption.txt", "wb")) == NULL)
- {
- printf("cannot open outfile!!!\n");
- exit(0);
- }
- init();
- inbfr = fgetc(infile);
- while (!feof(infile))
- {
- bitsum = 0;
- for (int i = 0; i < n; i++) bitsum += getbit();
- if (bitsum >= 2) putbit(1);
- else putbit(0);
- }
- alignbits();
- fclose(infile);
- fclose(outfile);
- }
- voidcode()
- {
- int n = 3;
- int bitval;
- if((infile=fopen("plaintext.txt","rb"))==NULL)
- {
- int a;
- cout << "請輸入數值: ";
- cin >> a;
- ofstream file_writer(