当前位置: 首页 > news >正文

西电现代密码学实验三

1.代码

import mathdef compute():P = 1009Q = 3643TOTIENT = (P - 1) * (Q - 1)numunconcealedp = count_all_unconcealed(P)numunconcealedq = count_all_unconcealed(Q)minunconcealedp = min(numunconcealedp)minunconcealedq = min(numunconcealedq)ans = sum(e for e in range(TOTIENT) ifnumunconcealedp[e % (P - 1)] == minunconcealedp andnumunconcealedq[e % (Q - 1)] == minunconcealedq)return str(ans)def count_all_unconcealed(prime):result = []for e in range(prime - 1):if math.gcd(e, prime - 1) == 1:result.append(count_unconcealed(prime, e))else:result.append(10**20)  return resultdef count_unconcealed(modulus, e):result = 0for m in range(modulus):if pow(m, e, modulus) == m:result += 1return resultif __name__ == "__main__":print(compute())

2.代码

from Crypto.Random import random
import binasciidef invmod(a, n):t = 0newt = 1r = nnewr = awhile newr != 0:q = r // newr(t, newt) = (newt, t - q * newt)(r, newr) = (newr, r - q * newr)if r > 1:raise Exception('unexpected')if t < 0:t += nreturn tsmallPrimes = [2, 3, 5, 7, 11, 13, 17, 19]def hasSmallPrimeFactor(p):for x in smallPrimes:if p % x == 0:return Truereturn Falsedef isProbablePrime(p, n):for i in range(n):a = random.randint(1, p-1)if pow(a, p - 1, p) != 1:return Falsereturn Truedef getProbablePrime(bitcount):while True:p = random.randint(2**(bitcount - 1), 2**bitcount - 1)if not hasSmallPrimeFactor(p) and isProbablePrime(p, 5):return pdef genKey(keysize):e = 3bitcount = (keysize + 1) // 2 + 1p = 7while (p - 1) % e == 0:p = getProbablePrime(bitcount)q = pwhile q == p or (q - 1) % e == 0:q = getProbablePrime(bitcount)n = p * qet = (p - 1) * (q - 1)d = invmod(e, et)pub = (e, n)priv = (d, n)return (pub, priv)def encryptnum(pub, m):(e, n) = pubif m < 0 or m >= n:raise ValueError(str(m) + ' out of range')return pow(m, e, n)def decryptnum(priv, c):(d, n) = privif c < 0 or c >= n:raise ValueError(str(c) + ' out of range')return pow(c, d, n)# Drops leading zero bytes.
def bytestonum(s):return int.from_bytes(s, byteorder='big')def numtobytes(k):return k.to_bytes((k.bit_length() + 7) // 8, byteorder='big')def encryptbytes(pub, mbytes):m = bytestonum(mbytes)c = encryptnum(pub, m)cbytes = numtobytes(c)return cbytesdef decryptbytes(priv, cbytes):c = bytestonum(cbytes)m = decryptnum(priv, c)mstr = numtobytes(m)return mstrif __name__ == '__main__':pub, priv = genKey(128)m = b'test'c = encryptbytes(pub, m)m2 = decryptbytes(priv, c)if m != m2:raise Exception(str(m) + ' != ' + str(m2))print("加密解密成功!原始数据:", m, "解密后:", m2)

http://www.dtcms.com/a/585927.html

相关文章:

  • winlogon登录对话框user32!sldrawtext显示星号
  • 昌吉做网站推广的公司php网站后台忘记密码
  • 非法网站开发爱企业 查询
  • 【P1】win10安装 Docker教程
  • 苹果CMS搭建方法技术文章大纲
  • 台州黄岩做网站宁夏众擎达网站建设
  • 电商网站构建网站不支持php
  • 【好书】简史推荐(20251108)
  • [C++]缺省参数-声明和定义歧义问题
  • 做美食教程的网站有哪些软件商店app
  • mysql提权方式-UDF提权、MOF提权
  • 快站是个什么平台三只松鼠有趣的软文
  • Xilinx FPGA怎么使用LUTRAM
  • 漫谈 Java 轻量级的模板技术:从字符串替换到复杂模板
  • 免费网站空间有哪些mdx wordpress
  • 第九章 生成树
  • UniApp 全局使用字体教程
  • 404网站怎么做网站开发费用明细
  • python爬虫学习笔记
  • 【算法】递归算法实战:汉诺塔问题详解与代码实现
  • js 网站首页下拉广告南宁市网站开发建设
  • SolarEdge和英飞凌合作开发人工智能数据中心
  • asp.net core webapi------3.AutoMapper的使用
  • CCF LMCC人工智能大模型认证 青少年组 第一轮样题
  • 百度搜索不到asp做的网站全球知名购物网站有哪些
  • Android Studio 中 Gradle 同步慢 / 失败:清理、配置全攻略
  • Makefile极简指南
  • 信息系统项目管理师--论文case
  • win7 iis网站无法显示该页面网站上线准备
  • 华为防火墙基础功能详解:构建网络安全的基石