计算机安全学第二次实践作业

一、任意给定两个素数p和q,p!= q,记 N = p * q ,构造Zn*,问(编程解决):

1、是否每个元素都有inverse?是否成群? 2、这个集合有多少元素?

这题主要是要理解群的定义,一个二元运算的集合如果符合:1.封闭性;2.结合律;3.有单位元;4.对任意元素都存在逆元。则这个集合称为群。以下为编程实现的内容:

from __future__ import division
import random

p = 0
q = 0

for j in range(100000):
    while (1):
        i = random.randint(1, 20)
        for num in range(2, i):
            if (i % num == 0):
                break
        else:
            p = i
            break
    while (1):
        k = random.randint(1, 20)
        for m in range(2, k):
            if (k % m == 0):
                break
        else:
            q = k
            break
    if (q != p): break

print("随机生成的两个素数分别为 p: ", p, ", q: ", q)
N = p * q
print("  N : ", N, "生成的集合元素总数即为", N)

#下面根据群的判定条件判断是否成群
b = 0#用来判断是否符合群
#1.是否封闭
for i in range(1, N):
    for j in range(1, N):
        modNum = (i * j) % N
        #print (modNum)
        if ( modNum >= N and modNum < 0):
            b = 1
if (b == 1):
    print("这个集合并不是封闭的,不成群")
else:
    print("这个集合是封闭的")

#是否符合结合律
for i in range(1, N):
    for j in range(1, N):
        for k in range(1, N):
            if (((((i * j) % N) * k) % N ) != ((((j * k) % N) * i) % N )):
                b = 1
if (b == 1):
    print("这个集合并不符合结合律,不成群")
else:
    print("这个集合符合结合律")

#模N乘法单位元为1
for i in range(1, N):
    for j in range(1, N):
        if(i * j == j * i == i):
            b = 1
            c = j#存下单位元
if (b == 1):
    print("这个集合存在单位元,该单位元为", c)
else:
    print("这个集合不存在单位元,不成群")

#是否对任意元素都存在逆元
inversenum = [100 for i in range(N)]
for i in range(1, N):
    for j in range(1, N):
        modNum = (i * j) % N
        if (modNum == 1):
            inversenum[i] = c

ifInverse = 1
for i in range(1, len(inversenum)):
    if (inversenum[i] != 1):
        ifInverse = 0
        print("这个集合中存在一个元素不含逆元,该元素为", i)
        print("所以这个集合不成群")
        break
if (ifInverse):
    print("这个集合中每个元素都存在逆元")
    print("经检测该集合符合所有群的定义要求,故该集合成群")

理解了群的定义后再使用python编程总体上难度中等。

二、写一个程序,实现AES的S-box的构造。
这一题相比于上一题难度要高出许多,基本上在编写的过程中都是在百度。
要实现S盒的构造首先要解决在有限域内求出乘法逆元的值。之后再对逆元进行变换,这里需要用到一个矩阵,用16进制表示。其中还需要与{63}这个字节进行异或。在看了下面这个网址之后
http://www.docin.com/p-929525675.html
再一定程度上进行些许修改为python语言得出了以下编程。

#首先构造S盒,8位共能表示256个数
l_t   = [0 for i in range(256)]
m_t   = [0 for i in range(256)]
Sbox  = [0 for i in range(256)]
mid_t = [0 for i in range(256)]

b = [0xf1, 0xe3, 0xc7, 0x8f, 0x1f, 0x3e, 0x7c, 0xf8]#输入字节后变换所需的矩阵用16进制表示

#求出0-255的逆元
p = 1
for i in range(256):
    l_t[i] = p
    m_t[p] = i
    if (p & 0x80):
        p = p ^ (p << 1) ^ (0x11b)#8次不可约多项式16进制表示为11B
    else:
        p = p ^ (p << 1) ^ 0

#求出逆元后存放在mid_t中
for i in range(256):
    if (i):
        mid_t[i] = l_t[255 - m_t[i]]
    else:
        mid_t[i] = 0

#对逆元进行变换,用上构造的b矩阵以及{63}这个值
for i in range(256):
    t = 0
    m = 0
    mid = 0
    tab = 0
    for j in range(8):
        m = mid = (b[j] & mid_t[i])
        for k in range(8):
            n = mid>>1
            if (m != (n << 1)):
                t+=1
            mid = n
            m = mid
        if (t % 2 > 0):
            temp = 1
            for k in range(j):
                temp = temp << 1
            tab += temp
        t = 0
    Sbox[i] = tab ^ 0x63

#输出S盒
print("S盒如下")
for i in range(0, 257):
    print("%x" % Sbox[i - 1], end=" ")
    if (i % 16 == 0):
        print()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容