记二次剩余

from Crypto.Util.number import *
import random
import base64
import os

flag = b'xxx'
flag = base64.b64encode(flag)
part_size = len(flag)//3
part1 = flag[:part_size]
part2 = flag[part_size:2 * part_size]
part3 = flag[2 * part_size:]

def gen_keys(bits):
    while True:
        p = getPrime(bits)
        q = getPrime(bits)
        n = p * q
        k = random.randint(1, n)

        if pow(q ** 2 * k, (p - 1) // 2, p) + pow(p ** 2 * k, (q - 1) // 2, q) == p + q - 2:
            break
        return p, q, n, k

def bit_enc(m,n):
    enc = []
    m = bin(bytes_to_long(m))[2:]
    for x in m:
        while True:
            r = random.randint(1, n)
            if GCD(r, k) == 1:
                enc.append((k ** int(x) * r ** 2) % n)
                break
    return enc
if __name__ == '__main__':
    f = open('stepbystep.txt','w')
    f.write(f'part_size = {part_size}\n') # 32 
    p, q, n, k = gen_keys(1024)
    y = p ^ (bytes_to_long(part1) << 0x100)
    f.write(f'n = {n}\n')
    f.write(f'y = {y}\n')

    enc1 = bit_enc(part2,n)
    f.write(f'enc1 = {enc1}\n')

    e = 3
    r = getPrime(1024)
    m = bytes_to_long(part3 + os.urandom(128))
    M = m % r
    f.write(f'r = {r}\n')
    f.write(f'M = {M}\n')
    enc2 = pow(m, e, n)
    f.write(f'enc2 = {enc2}\n')

n = 28170615394813994128829444311922294768047711140557403853945487107089509134737767942656361548230221829951460844271639575394883663959935517401286468610803533794281322932272016151070004303694003064267127894498582758474889399072435632149814773794006700377495059535551601562497404157228212268055301420382159240876926718366155907065534007141933306379265213201601388196980959461243178574169497366868119687674891554278269534759630337252574501733517956676373291013127781435489132751470026441547613876124640645867844110455115246109355929378020562498143759261535211073747144498765678339037517382156239422037334011910477313579931
y = 159220553107177193400023378107257900962478698517628796905876914005522464561698874246291191230998317763194901894991385290134307075261722076436131488895536910117912445041560442858379826501161163372467275224931272546634069502187842680578039864204499755434023932362315829340273816781101788682876410192428287564079
p_ = ((y >> 512) << 512) + (y & (2 ^ 256 - 1))
PR.<x> = PolynomialRing(Zmod(n))
f = p_ + (x * 2 ** 256)
f = f.monic()
p0 = f.small_roots(2 ^ 256,0.4)
print(p_ + p0[0] * 2 ** 256)

p = 159220553107177193400023378107257900962478698517628796905876914005522464561698874246291191230998317763194901894991385290134307075261722076436131488895536914601862873373189346623370102585921882621795643375613240095719969918295959844527488766867194677670844144950629130942802580496956921624007957883073349196079
part1 = ((y // 2 ** 256) % 2 ** 256) ^^ ((p // 2 ** 256) % 2 ** 256)
print(long_to_bytes(part1))
# ZmxhZ3s4ZjYzNzc3MTMyZWRkNmJlNmM2

 

with open('stepbystep.txt') as f:
    exec(f.read())
part2 = ''
for i in enc1:
    if pow(i,(p-1)//2,p) == 1:
        part2 += '0'
    else:
        part2 += '1'
part2 = int(part2,2)
print(long_to_bytes(part2))
# Yjg4NGQyMTEyMjI5YWI2OWEwYjNkOTgz

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 致远OA是一款常用的企业办公自动化软件,支持二次开发功能。在致远OA中,发送表单的操作可以通过二次开发来实现。 首先,二次开发需要了解致远OA的基本原理和开发框架。致远OA采用B/S架构,前端使用HTML、CSS和JavaScript等技术,后端采用Java语言进行开发。开发过程主要包括业务逻辑编写、数据库设计与开发、接口开发等。 要实现发送表单功能,需要在致远OA中添加相应的表单模板和发送功能。通过二次开发,可以自定义表单页面和相关逻辑,实现表单的填写、提交和发送。 具体操作步骤如下: 1. 首先,根据实际需求,在致远OA系统中创建表单模板。表单模板可以使用致远OA提供的表单设计器进行设计,也可以使用其他工具进行设计,并将设计好的表单模板导入到致远OA系统中。 2. 在二次开发中编写表单页面的前端代码。可以使用HTML、CSS和JavaScript等技术,根据需求设计表单的样式和布局。同时,需要编写与表单相关的JavaScript代码,处理表单的验证、提交等操作。 3. 在致远OA系统中创建表单对应的数据表,用于存储表单数据。可以使用数据库管理工具创建数据表,并将数据表与致远OA系统进行关联。 4. 在二次开发中编写表单页面的后端代码。可以使用Java语言编写,通过编写相关的接口,实现表单数据的查询、保存和发送等功能。在后端代码中,需要与致远OA系统进行数据交互,可以通过调用致远OA提供的API来实现。 5. 最后,在致远OA系统中添加表单发送按钮,并将其与相应的功能进行关联。在二次开发中,可以通过编写按钮的点击事件,调用相应的接口,实现发送表单的功能。 通过以上步骤,就可以实现致远OA二次开发发送表单的功能。在具体操作过程中,还需要根据实际需求进行相应的调整和修改。 ### 回答2: 致远OA是一款企业办公自动化软件,提供标准流程和表单模板。为了满足特定的业务需求,致远OA支持二次开发,并且可以通过二次开发来实现发送表单功能。 在进行二次开发之前,首先需要明确发送表单的具体需求。例如,是需要在特定条件下自动发送表单给指定用户,还是由用户手动触发发送表单等。然后,根据需求,通过OA的二次开发平台进行相应的代码编写。 一般来说,开发发送表单的逻辑包括以下几个步骤: 1. 获取表单数据:根据业务需求,通过OA提供的接口或数据库查询获取需要发送的表单数据。 2. 生成邮件内容:将表单数据转化为邮件内容,并设置邮件的标题、正文等信息。可以使用OA提供的邮件发送接口或者其他第三方邮件服务进行发送。 3. 设置接收人:确定接收表单的用户,可以根据部门、角色、特定人员等进行指定。在生成邮件时,需要将接收人信息设置为收件人地址。 4. 触发发送:根据业务逻辑,确定发送表单的触发条件,如特定事件发生、用户手动触发等。当满足触发条件时,调用发送表单的代码,将表单发送给指定的接收人。 在二次开发过程中,需要根据具体需求编写相关的代码,并测试其正确性和稳定性。同时,也需要注意系统的安全性和稳定性,避免可能的漏洞和错误。另外,开发完成后,还需进行相应的文档录和发布流程,便于系统的维护和扩展。 通过以上步骤的二次开发,致远OA可以实现发送表单的功能,方便用户根据自身需求进行业务流程的管理和表单的定制化发送。 ### 回答3: 致远OA是一款功能强大的办公自动化系统,可以帮助企业实现业务流程的自动化管理。在进行OA二次开发时,我们可以通过发送表单来实现数据的提交和流转。 首先,我们需要在OA系统中进行表单的设计和配置。可以根据企业的实际需求,自定义各种表单模板,包括请假、报销、采购等各种业务表单。通过系统管理员或开发人员的操作,将设计好的表单模板添加到系统中。 接下来,当用户需要提交表单时,可以通过OA系统提供的接口或者自定义的界面进行表单的填写和提交。用户可以根据表单中的要求填写相应的信息,例如请假的时间、原因等。填写完成后,点击提交按钮,表单的数据将会被发送到后台进行处理。 在二次开发中,我们可以对表单的提交进行自定义的逻辑处理。例如,对于请假申请,系统可以根据用户提交的请假时间和原因,自动计算出剩余的可用假期天数,并进行相应的提醒和审批流程。这样可以提高企业的工作效率和管理水平。 除了发送表单,在OA系统的二次开发中还可以实现其他功能,例如自动化的邮件通知、数据自动同步等。这些功能都可以根据企业的实际需求进行定制开发,以提高工作效率和管理水平。 综上所述,致远OA二次开发中发送表单是一项重要的功能。通过表单的设计、填写和提交,可以实现数据的流转和处理,提高企业的工作效率和管理水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值