博文
AES加解密的源代码(2005-12-21 20:34:00)
摘要:自己写的AES的源代码。有的地方可能写的还不是很好。
#include using namespace std;
#ifndef uint8#define uint8 unsigned char#endif
uint8 sbox[256]={ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, ......
整数划分问题(2005-10-01 21:29:00)
摘要:将正整数n表示成一系列正整数之和,n=n1+n2+…+nk,其中n1>=n2>=…>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分数,记作p(n)。例如正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1+1+1;1+1+1+1+1+1.在正整数n所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递推关系。(1)q(n,1)=1,n>=1;(2)q(n,m)=q(n,n),m>=n;最大加数n1不能大于n。(3)q(n,n)=1+q(n,m-1);n的划分由n1=n的划分和n1<=n-1的划分组成。(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1;正整数n的最大加n1不大于m的划分由n1=m的划分和n1<=m-1的划分组成。其算法可以写成:int q(int n,int m){ if((n<1)||(m<1))return 0; if((n==1)||(m==1))return 1; if(n<m)return q(n,n); if(n==m)return q(n,m-1)+1; return q(n,m-1)+q(n-m,m);}......
错排问题(2005-09-09 13:25:00)
摘要: 错排问题就是n个元素依次给以标号1,2,…,n。N个元素的全排列中,求每个元素都不在自己原来位置上的排列数。 设Ai为数i在第i位上的全体排列,i=1,2,...,n.因数字i不动,故:|Ai|=(n-1)!,i=1,2,...,n.同理:|Ai∩Aj|=(n-2)!,i,j=1,2,...n,i≠j.每个元素都不在原来位置上的排列数为:n!-C(n,1)*(n-1)!+C(n,2)*(n-2)!-…+C(n,n)*1=n!(1-1/1!+1/2!-1/3!+…+1/n!)如:求8个字母A,B,C,D,E,F,G,H的全排列中只有4个元素不在原来位置上的排列数.[解] 8个字母中只有4个不在原来的位置上,其余4个字母保持不动,相当于4个元素的错排, 其数目为:4!(1-1/1!+1/2!-1/3!+1/4!)=9.故8个字母的全排列中有4个不在原来位置上的排列数应为:C(8,4)×9=630.......
