分组算法
① 分组密码的算法要求
分组密码算法实际上就是密钥控制下,通过某个置换来实现对明文分组的加密变换。为了保证密码算法的安全强度,对密码算法的要求如下。 加密速度慢,错误扩散和传播。
分组密码将定长的明文块转换成等长的密文,这一过程在秘钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 64 位,但这很可能会增加。
明文消息通常要比特定的分组大小长得多,而且使用不同的技术或操作方式。这样的方式示例有:电子编码本(ECB)、密码分组链接(CBC)或密码反馈(CFB)。ECB 使用同一个密钥简单地将每个明文块一个接一个地进行加密;在 CBC 方式中,每个明文块在加密前先与前一密文块进行“异或”运算,从而增加了复杂程度,可以使某些攻击更难以实施。 “输出反馈”方式(OFB)类似 CBC 方式,但是进行“异或”的量是独立生成的。 CBC 受到广泛使用,例如在 DES(qv)实现中,而且在有关密码术的技术性方面的相应书籍中深入讨论了各种方式。请注意:您自己建立的 密码系统的普遍弱点就是以简单的形式来使用某些公开的算法,而不是以提供了额外保护的特定方式使用。
迭代的分组密码是那些其加密过程有多次循环的密码,因此提高了安全性。在每个循环中,可以通过使用特殊的函数从初始秘钥派生出的子密钥来应用适当的变换。该附加的计算需求必然会影响可以管理加密的速度,因此在安全性需要和执行速度之间存在着一种平衡。天下没有免费的午餐,密码术也是如此;与其它地方一样,应用适当方法的技巧中有一部分是源于对需要进行的权衡以及它们与需求平衡的关系如何的理解。
分组密码包括DES、IDEA、SAFER、Blowfish和 Skipjack — 最后一个是“美国国家安全局(US National Security Agency,NSA)”限制器芯片中使用的算法。
② n个数分组排列的算法
如果没有空间复杂度的限制,三层循环加判重就行了,判重可以用哈希,主题代码类似这样。。
int ha[ 10101101 ]={0}; //随便开一个素数大数组,这里数据很小,所以开的也比较小,具体看哈希技术的详解吧
bool hash(int a , int b ,int c)
{
if(hash[ (a*a+b*b+c*c)% 10101101]!=0) return 0;
hash[ (a*a+b*b+c*c)% 10101101]++;
return 1;
}
for(int i = 1 ; i <= 24 ; i++)
for(int j = 1 ; j <= 24 ;j++)
for(int k = 1 ; k <= 24 ; k++)
if(i!=j && j!=k && i !=k && hash(i,j,k))
cout << i<<" "<<j<<" "<<k;
写的有点草。。反正大体意思就是用哈希判重就成
那个分组很简单,程序体里就不显示了
③ java 按日期分组 算法
直接用SQL语句
select count(id) as 数量,day(date) as 生产日期 from table group by day(date) order by day(czrq)
如果库里不止一个月的数据,那么再加个where条件
④ 分组加密算法
基于SOC的FPSLIC硬件实现分组加密算法
1 引言:
美国Atmel公司生产的AT94K系列芯片是以Atmel 0.35 的5层金属CMOS工艺制造。它基于SRAM的FPGA、高性能准外设的Atmel 8位RISC AVR单片机。另外器件中还包括扩展数据和程序SRAM及器件控制和管理逻辑。图1-1是Atmel公司的FPSLIC内部结构图。
图1-1 FPSLIC内部结构图
AT94K内嵌AVR内核,Atmel公司的FPSLIC可编程SOC内嵌高性能和低功耗的8位AVR单片机,最多还带有36KB的SRAM,2个UART、1个双线串行接口,3个定时/计数器、1个8 8乘法器以及一个实时时钟。通过采用单周期指令,运算速度高达1MPS/MHz,这样用户可以充分优化系统功耗和处理速度。AVR内核基于增强型RISC结构,拥有丰富的指令系统以及32个通用工作寄存器。而且所有通用寄存器都与算术逻辑单元ALU相连;另外,在一个时钟周期内,执行单条指令时允许存取2个独立的寄存器,这种结构使得代码效率更高,并且在相同的时钟频率下,可以获得比传统的CISC微处理器高10倍的数据吞吐量。AVR从片内SRAM执行程序,由于AVR运行代码存储在SRAM中,因此它可以提供比较大的吞吐量,这样可以使其工作在突发模式上。在这种模式上,AVR大多时间都是处于低功耗待机状态,并能在很短的时间里进行高性能的处理。微处理器在突发模式运行模式下的平均功耗要比长时间低频率运行时的功耗低得多。FPSLIC的待机电流小于100 ,典型的工作电流为2-3mA/MHz。在系统上电时,FPGA配置SRAM和AVR程序SRAM都能自动地通过Atmel在系统可编程串行存贮器AT17来装载。
2 FPSLIC硬件的设计实现:
2.1 硬件实现框图
图2-1系统硬件实现框图
图2-1是为了实现加密算法的硬件框图。计算机通过它的串口和FPSLIC的通信端口UART0相连,用来进行数据的传送和接收。FPSLIC通过AVR的通信端口等待接收主机传来的信息,通过内部的下载程序将数据进行处理,最后再传回到主机上。图2-1中FPGA是一个计数器,此计数器一上电就从0计数,并用进位输出信号产生一个AVR中断,即进位输出信号RCO连接到AVR的中断信号INTA0。当AVR接收到由计数器的进位信号产生的中断时,则执行INTA0的中断服务程序(ISR)。在此期间
,AVR就给INTA0产生的次数计数,并把它放到8位的AVR-FPGA数据总线上,这时就会触发AVR的写使能信号(FPGA的aWE信号端)和FPGA的I/O SELECT0信号(FPGA的LOAD信号端),同时从AVR——FPGA数据总线上将数据载入计数器。数码管的各极连接在实验板上的可编程端口,通过引脚配置用来显示数据。LED指示灯在AVR I/O输出的D口,直接将数据通过命令PORTD来显示。FPGA的时钟通过GCLK5选自AVR单片机的时钟。我们以DES数据加密为例,由仿真试验可以得出DES加密的速率为57.024 kbit/s,它大于串口的最大速率19.2kbit/s,因此可以实时进行数据的加密操作。
一个典型的FPSLIC设计通常应该包括以下几个步骤:
1. 利用联合仿真软件建立一个FPSLIC工程。
2. 预先建立一个AVR软件仿真程序文件。
3. 预先建立一个FPGA的硬件仿真程序文件。
4. 设置和运行AVR-FPGA接口设计。
5. 运行布局前的联合仿真Pre-layout Converification(这一步是可选择的)。
6. 运行Figaro-IDS进行FPGA的布局布线。
7. 运行布局后的联合仿真Pos-layout Converification(这一步是可选择的)。
8. 器件编程数据下载与实验验证。
我们以DES数据加密为例,(新建的工程名为lab1.apj,AVR仿真程序文件为desjiami.asm,FPGA的硬件仿真程序为Count.vhdl)。
2.2 编译AVR的仿真程序软件
(以上程序代码是整个仿真的程序框架,最主要的是对接口进行初始化和对发送和接收部分进行设置,以便进行串口的通信)
2.3器件编程与试验验证
1. 将下载电缆ATDH2225的25针的一端从计算机的并行口接出,令一端10针扁平线插入ATSTK94实验板的J1插头上。下载电缆的标有红色的线和J1插头的第一脚连接。
2. 因为要和计算机串口进行通信,因此要制作一个串口连接电缆,其九针连接电缆的连接关系如下图2-2。电缆一端连接在计算机的任意串口上,另一端连接在实验板上的UART0上。连接电缆只需要连接三根线,UART0的2端连接在FPSLIC的发送端,因此它和计算机的串口2端(接收数据端)相连。UART0的3端连接在FPSLIC的接收端,因此它和计算机的串口2端(发送数据端)相连。
&n
bsp; 图2-2 串口通信连接指示图
3. 选择4MHz时钟,即在实验板上将JP17设置在靠近板子内侧位置,而将JP18不连接,也就是将其连接跳线拔掉。
4. 将直流9V电源接头插入ATSTK94实验板的电源插座P3上。
5. 将实验板上的开关SW10调至PROG位置。开关SW10有编程(PROG)和运行(RUN)两种连接。在编程位置,用户可以通过下载电缆和下载程序软件CPS,将System Designer生成的FPSLIC数据流文件给配置存储器编程。在运行位置,FPSLIC器件将载入数据流文件并运行该设计。
6. 打开电源开关SW14,即将它调整到ON位置。这时候实验板上电源发光二极管(红色)发光,表示实验板上已经上电。这样,硬件就连接完毕,等待下一步的数据下载。
7. 单击OK按钮,即生成数据流文件,它将下载到ATSTK94实验板的配置存储器中,这时,Atmel的AT17配置可编程系统(CPS)窗口被打开,如下图2-3,并自动给器件编程。
图2-3 FPSLIC控制寄存器设置对话框
在Procesure下拉列表框中选择/P Partition,Program and Verify from an Atmel File。在Family下拉列表框中选择AT40K/Cypress,在Device下拉列表框中选择AT17LV010(A)(1M)。其余采用系统的默认值。然后点击Start Proce按钮,如果电缆等硬件设置正确,那么程序将下载到实验板上。
8. 将开关SW10调至RUN位置,打开串口调试程序Accesspot129软件。对于Accessport129的设置为:串口为COM1(根据用户选择的计算机端口来设定),波特率:9600,校验位:NONE,数据位为8 ,停止位选择1,串口开关选择开;
3 试验结果:
图3-1中,下面方框中是要输入的64比特的明文,(程序中输入的明文为0123456789ABCDEF),当这64个比特的数据全部输入完毕后,点击发送按钮,在软件上方的数据接收端显示出经过DES算法加密后的密文(85E813540F0AB405)。通过硬件实现的的结果和实际
仿真结果是完全一致的。同时通过数码管也分别显示出最后的加密数据。至此整个硬件试验结束。
图3-1 Accesspot串口调试软件显示的结果图
从上面的串口调试软件可以看出,DES算法的仿真是正确的也是可以在实际中应用的。同理,可以通过以上的方法来实现DES解密和AES等其它的分组加解密。
⑤ 行测 数学题 分组 怎么计算的
1.间接法
即部分符合条件排除法,采用正难则反,等价转换的策略。为求完成某件事的方法种数,如果我们分步考虑时,会出现某一步的方法种数不确定或计数有重复,就要考虑用分类法,分类法是解决复杂问题的有效手段,而当正面分类情况种数较多时,则就考虑用间接法计数.
例:从6名男生,5名女生中任选4人参加竞赛,要求男女至少各1名,有多少种不同的选法?
A.240 B.310 C.720 D.1080
正确答案是B。
解析:此题从正面考虑的话情况比较多,如果采用间接法,男女至少各一人的反面就是分别只选男生或者女生,这样就可以变化成C(11,4)-C(6,4)-C(5,4)=310。
2.科学分类法
问题中既有元素的限制,又有排列的问题,一般是先元素(即组合)后排列。
对于较复杂的排列组合问题,由于情况繁多,因此要对各种不同情况,进行gwyzk.com科学分类,以便有条不紊地进行解答,避免重复或遗漏现象发生。同时明确分类后的各种情况符合加法原理,要做相加运算。
例:某单位邀请10为教师中的6为参加一个会议,其中甲,乙两位不能同时参加,则邀请的不同方法有( )种。
A.84 B.98 C.112 D.140
正确答案是D。
解析:按要求:甲、乙不能同时参加分成以下几类:
a.甲参加,乙不参加,那么从剩下的8位教师中选出5位,有C(8,5)=56种;
b.乙参加,甲不参加,同(a)有56种;
c.甲、乙都不参加,那么从剩下的8位教师中选出6位,有C(8,6)=28种。
故共有56+56+28=140种。
3.特殊优先法
特殊元素,优先处理;特殊位置,优先考虑。对于有附加条件的排列组合问题,一般采用:先考虑满足特殊的元素和位置,再考虑其它元素和位置。
例:从6名志愿者中选出4人分别从事翻译、导游、导购、保洁四项不同的工作,若其中甲、乙两名志愿者都不能从事翻译工作,则不同的选派方案共有( )
A.280种 B.240种 C.180种 D.96种
正确答案是B。
解析:由于甲、乙两名志愿者都不能从事翻译工作,所以翻译工作就是“特殊”位置,因此翻译工作从剩下的四名志愿者中任选一人有C(4,1)=4种不同的选法,再从其余的5人中任选3人从事导游、导购、保洁三项不同的工作有A(5,3)=10种不同的选法,所以不同的选派方案共有 C(4,1)×A(5,3)=240种,所以选B。
4.捆绑法
所谓捆绑法,指在解决对于某几个元素要求相邻的问题时,先整体考虑,将相邻元素视作一个整体参与排序,然后再单独考虑这个整体内部各元素间顺序。注意:其首要特点是相邻,其次捆绑法一般都应用在不同物体的排序问题中。
例:5个男生和3个女生排成一排,3个女生必须排在一起,有多少种不同排法?
A.240 B.320 C.450 D.480
正确答案是B。
解析:采用捆绑法,把3个女生视为一个元素,与5个男生进行排列,共有 A(6,6)=6x5x4x3x2种,然后3个女生内部再进行排列,有A(3,3)=6种,两次是分步完成的,应采用乘法,所以排法共有:A(6,6) ×A(3,3) =320(种)
5.选“一”法,类似除法
对于某几个元素顺序一定的排列问题,可先把这几个元素与其他元素一同进行排列,然后用总的排列数除以这几个元素的全排列数。 这里的“选一”是说:和所求“相似”的排列方法有很多,我们只取其中的一种。
例:五人排队甲在乙前面的排法有几种?
A.60 B.120 C.150 D.180
正确答案是A。
解析:五个人的安排方式有5!=120种,其中包括甲在乙前面和甲在乙后面两种情形(这里没有提到甲乙相邻不相邻,可以不去考虑),题目要求之前甲在乙前面一种情况,所以答案是A(5,5)÷A(2,2)=60种。
6.插空法
所谓插空法,指在解决对于某几个元素要求不相邻的问题时,先将其它元素排好,再将指定的不相邻的元素插入已排好元素的间隙或两端位置。
注意:a.首要特点是不邻,其次是插空法一般应用在排序问题中。
b.将要求不相邻元素插入排好元素时,要注释是否能够插入两端位置。
c.对于捆绑法和插空法的区别,可简单记为“相邻问题捆绑法,不邻问题插空法”。
例:若有甲、乙、丙、丁、戊五个人排队,要求甲和乙两个人必须不站在一起,且甲和乙不能站在两端,则有多少排队方法?
A.9 B.12 C.15 D.20
正确答案是B。
解析:先排好丙、丁、戊三个人,然后将甲、乙插到丙、丁、戊所形成的两个空中,因为甲、乙不站两端,所以只有两个空可选,方法总数为A(3,3)×A(2,2)=12种。
7.插板法
所谓插板法,指在解决若干相同元素分组,要求每组至少一个元素时,采用将比所需分组数目少1的板插入元素之间形成分组的解题策略。
注意:其首要特点是元素相同,其次是每组至少含有一个元素,一般用于组合问题中。
例:将8个完全相同的球放到3个不同的盒子中,要求每个盒子至少放一个球,一共有多少种方法?
A.24 B.28 C.32 D.48
正确答案是B。
解析:解决这道问题只需要将8个球分成三组,然后依次将每一组分别放到一个盒子中即可。因此问题只需要把8个球分成三组即可,于是可以将8个球排成一排,然后用两个板插到8个球所形成的空里,即可顺利的把8个球分成三组。其中第一个板前面的球放到第一个盒子中,第一个板和第二个板之间的球放到第二个盒子中,第二个板后面的球放到第三个盒子中去。因为每个盒子至少放一个球,因此两个板不能放在同一个空里且板不能放在两端,于是其放板的方法数是C(8,2)=28种。(注:板也是无区别的)
⑥ 数据分组算法设计
一种简单方法是首先把80个数字从小到大排列,有现成的排列算法,套用就行了
然后设置一个20次的循环,第一次取数组的1,2,79,80
第二次取3,4,77,78
以此类推
这样如果80个数字是等差数列,那么每组数字和值一定相同
不是等差数列,和值也会很类似
⑦ 关于数组分组的方法,求计算方法~~
总思路:乘法原理
分析:给出的数本身不重复,特殊的是最后4个数选2个.
第一行4种可能
第二行4种可能
第三行4种可能
第四行4种可能
第五行:组合4选2=4*3/2=6
总共:4*4*4*4*6=1536
⑧ 求数字分组算法,请使用C或C++语言
我的想法比较简单。你可以将这个算法写成递归形式,第一层做组合挑选,共2^n种,第二层2
^n-1种.......。这样可以挑选所有的组合情况,最后再比较,挑选。程序比较容易实现,但是我担心效率。
如果需要进行智能处理,最好的方式是在递归过程中添加判断和预测,这样会提高效率,尽快搜索到好的结论。
⑨ C语言 数据分组的算法
如果你是希望通过输入来确定b的个数,又不想多申请空间,那就是动态数组的声明了,能够实现。
首先输入n,表示要输入的b[]的元素个数,在通过这个语句:
int *b= (int*)malloc(n*sizeof(int));
就能够通过输入的n来动态地给b申请合适的空间。
如果b[]已存在,只是想求得其中元素个数的话,那恐怕做不到,除非你的数据有一定的特点,比如都是整数,而b[]初始化为全负,那么可以通过一个循环获得b数组的元素个数
⑩ 统计学中分组数据四分位数的算法
第三个四分位数等于该样本中所有数值由小到大排列后第75%的数字.既然个数已经给了,并且利润是由小到大排好序的了,十分容易的.N=120,Q3=3*(N+1)/4=90.25, 也就是说第三四分位数就是第90.25个,19+30+42=91>90.25,所以说第三四分位数利润为400-500万元