- 博客(0)
- 资源 (8)
- 收藏
- 关注
MillerRabin素性检验
nt MillerRabin(unsigned char Odd[],unsigned char Random[],int s,unsigned char Mp[]){//MillerRabin素性检验//OK
unsigned char A[M],B[M];
int t,i;
PowerFunction(Random,Mp,Odd,A);
t=Judgment1(A);
if(t){
printf("Odd可能是素数!\n");
return 1;
}//if
for(i=0;i<s;i++){
t=Judgment_1(A,Odd);
if(t==-1){
printf("Odd可能是素数!\n");
return 1;
}//if
MultiplyofLargeNumber2(A,A,B);
ModOperator(B,Odd,A);
}//for
printf("Odd是复和数!\n");
return 0;
}//MillerRabin
2013-01-21
AES 源代码
nt FileOut( const void *strOut, int len, const char *strFile )
{
FILE *fp = NULL;
int iWrite=0;
if( strOut == NULL || len ==0 )
goto out;
//! 打开文件句柄
if( (fp = fopen( strFile,"wb" )) == NULL ) // 二进制写
goto out;
iWrite = fwrite( strOut, 1, len, fp );
fclose(fp);
out:
return iWrite;
}
/******************************************************************************/
// 名称:CheckParse
// 功能:校验应用程序入口参数
// 参数:argc等于main主函数argc参数,argv指向main主函数argv参数
// 返回:若参数合法返回true,否则返回false
// 备注:简单的入口参数校验
/******************************************************************************/
bool CheckParse( int argc, char** argv )
{
if( (argc != 4) ||
(argv[1][1]!='e' && argv[1][1]!='d') ||
(strlen( argv[3] ) >(128/8) ) )
{
Usage( argv[0] );
return false;
}
return true;
}
//! 程序主函数(Use MFC in a Shared DLL)
int main( int argc, char **argv )
{
//! 在此处填写代码......
return 0;
}
2013-01-21
隐式或明式输入密码
//by史瑞
//隐式或明式输入密码
#include
#include
#include
//#define PROCALIM OK
typedef struct KeyNode
{
char ch;
struct KeyNode *next;
};
#define LEN sizeof(struct KeyNode)
struct KeyNode *CreatKeyNode()
{
struct KeyNode *head;
head=(struct KeyNode *)malloc(LEN);
#ifndef PROCALIM
head->ch=getch();
printf("*");
#else
head->ch=getchar();
#endif
head->next=NULL;
return head;
}
2013-01-21
对偶反馈移位寄存器DSR
//by史瑞
//进动一拍输出一个字节ok
unsigned char DSR_MoveWord(unsigned char *Const,unsigned char *Array,unsigned long num){
int i,t;
unsigned char ch,Output=0x00;
for(i=0;i<8;i++){
ch=(*Array)&0x80;
t=ch?1:0;
ch>>=i;
Output^=ch;
LeftShift(Array,Dig(num));
if(t)
XorDSR(Array,Const,Dig(num));
}
return Output;
}
2013-01-21
随即全排列生成器
//by史瑞
#include<stdlib.h>//srand()、rand()
#include<time.h>//time();
#include<conio.h>
#include<stdio.h>
swap(unsigned char *pm,unsigned char *pn){
unsigned char temp;
temp=*pm;
*pm=*pn;
*pn=temp;
}
void Random(unsigned char a[]){
int i;
int m=256;
//printf("\n产生范围在0到255的随机数 \n");
srand( (unsigned char)time( NULL ) );
2013-01-21
Euclid算法判断互素
//by史瑞
#include<stdio.h>
#include<stdlib.h>
#define bool int
#define true 1
#define false 0
#define M 2//判断多少个数互素
static long int Number[M]={170,201};
bool JudgePrime(long int Ina,long int Inb){
long int r,q,t=0,v=1,temp;
long int a,b;
if(Ina>=Inb){
a=Ina;
b=Inb;
}
else{
b=Ina;
a=Inb;
}
while(1){
q=(long int)a/b;
r=a-b*q;
a=b;
b=r;
temp=t;
t=v;
v=temp-q*v;
if(b==0)
break;
}
if(a==1)
return true;
else
return false;
}//JudgePrime
2013-01-21
B_M算法求线性复杂度
可以处理无限数据,求其线性复杂度
//by史瑞
//LFSR线性移位寄存器以及求异或运算OK
unsigned char LFSRB_M(unsigned char *fun,unsigned char *seq,unsigned long Cont){
unsigned long x;
unsigned char ch=0x00,t=0x00,*array;
array=(unsigned char *)malloc(Cont*sizeof(unsigned char));
for(x=0;x<Cont;x++)
*(array+x)=(*(seq+x))&(*(fun+x));
for(x=0;x<Cont*8;x++){
ch=(*array)&0x80;
LeftShift(array,Cont);
t^=ch;
}
free(array);
return t;
}
#define word(ln) ((ln-1)/8+1)
#define place(ln) ((ln-1)%8)
//Berlek_Massey求生成任意序列的联接多项式OK
unsigned char *Berlek_Massey(unsigned char *seq,unsigned long *Rank,unsigned long Cont,FILE *fmm){
unsigned long n=0,m,lm,ln=0;
int d;
unsigned long lfm;
unsigned char *fun,*fm,*array,ch,t=0x00;
unsigned char *func,*fmc;
unsigned long x,y,k;
fun=(unsigned char *)malloc(sizeof(unsigned char));
*(fun)=0x00;
for(x=0;x<Cont*8;x++){
if(ln!=0){
array=(unsigned char *)malloc(word(ln));
InitialDSR(array,word(ln));
for(y=0;y<ln;y++){
ch=((*(seq+(n-(y+1))/8))<<((n-(y+1))%8))&0x80;
if(ch)
*(array+y/8)^=(ch>>(y%8));
}
t=LFSRB_M(fun,array,word(ln));
d=((((*(seq+n/8))<<(n%8))&0x80;)^t)?1:0;
free(array);
}
else
d=(((*(seq+n/8))<<(n%8))&0x80;)?1:0;
if(d){
if(ln!=0){
lm=ln;
func=(unsigned char *)malloc(word(ln)*sizeof(unsigned char));
memcpy(func,fun,word(ln));
if(ln<(n+1-ln)){
ln=n+1-ln;
}
fmc=(unsigned char *)malloc(word(ln)*sizeof(unsigned char));
InitialDSR(fmc,word(ln));
memcpy(fmc,fm,word(lfm));
for(k=0;k<n-m;k++){
RightShift(fmc,word(ln));
}
ch=0x80;
*(fmc+(n-m-1)/8)^=(ch>>((n-m-1)%8));
fun=(unsigned char *)realloc(fun,word(ln)*sizeof(unsigned char));
for(k=word(lm);k<word(ln);k++)
*(fun+k)=0x00;
XorDSR(fun,fmc,word(ln));
free(fmc);
if(lm<(n+1-lm)){
m=n;
lfm=lm;
fm=(unsigned char *)realloc(fm,word(lm));
memcpy(fm,func,word(lfm));
}
free(func);
}
else{
ln=n+1;
m=n;
if(m!=0){
fm=(unsigned char *)malloc(word(m)*sizeof(unsigned char));
InitialDSR(fm,word(m));
lfm=m;
}
else{
fm=(unsigned char *)malloc(sizeof(unsigned char));
*fm=0x00;
lfm=1;
}
fun=(unsigned char *)realloc(fun,word(ln));
InitialDSR(fun,word(ln));
ch=0x80;
ch>>=(place(ln));
*(fun+(word(ln)-1))^=ch;
}
}
n++;
printf("\t<%d,%d>",n,ln);
fprintf(fmm,"\t<n,d,ln>=<%d,%d,%d>",n,d,ln);
if(n%3==0){
printf("\n");
fprintf(fmm,"\n");
}
}
printf("\nFn=");
// for(k=0;k<word(ln);k++)
// FromBytetoBit(*(fun+k));
*Rank=ln;
return fun;
}
2013-01-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人