密码学实验课的题目,分享一下自己的代码,可能不够完美,供参考~自己动手才是王道哦!
(1)有限域GF§上的椭圆曲线:对于固定的a和b,满足形如方程
y2≡x3+ax+b(mod p) ( a,b,x,yGF§且4a3+27b2(mod p)≠0).
(2)椭圆曲线Ep(a,b)上的加法定义如下:
设P, Q, REp(a,b),则
①P+O=O+P=P;
②若P=(x,y),那么(x, y)+(x, -y)=O,即(x, -y)是P的加法逆元,记为-P;
③P+Q=Q+P;
④(P+Q)+R=P+(Q+R);
⑤设P=(x1,y1),Q=(x2,y2),P≠-Q,则P+Q=(x3,y3)由以下确定:
x3≡λ2-x1-x2(mod p)
y3≡λ(x1-x3)-y1(mod p)
其中。
(3)椭圆曲线上的离散对数问题(ECDLP):
用E(GF§)表示定义在有限域GF§上椭圆曲线E的有理子群,设任意两点P,QE (GF§)。求使kP=Q成立的k值问题就是E上的椭圆曲线离散对数问题。
编程求解椭圆曲线上的离散对数问题,主要包括椭圆曲线上的加法函数,乘法逆元的求解,以及验证点是否在椭圆曲线上等。
GF(29)上曲线E:y2=x3+4x+20 (mod p);E上两点P=(13,23),Q=(3,28)。编程求解k使满足kP=Q。
// 密码学08.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int qx ;
int qy ;
class Point{
public:
Point(int a, int b):px(a),py(b){}
int getx(){ return px; }
int gety(){ return py; }
Point add(Point p2);
private:
int px, py;
};
int x, y, q;
int func(int a, int b){
if (b == 0){
x = 1; y = 0; q = a;
}
else{
func(b, a%b);
double t = x;
x = y; y = t - a / b*y;
}
return y;//y是 b mod a的逆元 不保证y在一定范围内
}
Point Point:: add(Point p2){
int x1 = px;
int y1 = py;
int x2 = p2.getx();
int y2 = p2.gety();
int r = 0;
int x3 = x1, y3 = y1;
if (x1 == x2&&y1 == y2){
int ni = func(29, 2 * y1);
while (ni<0){
ni += 29;
}
r = ((3 * x1*x1 + 4)*ni)%29;
}
else{
int x21 = x2 - x1;
while (x21 < 0){ x21 = x21 + 29; }
int ni = func(29, x21);
while (ni<0){
ni += 29;
}
r = ((y2 - y1)*ni)%29;
}
x3 = (r*r - x1 - x2);
while (x3 < 0 || x3 >= 29){
if (x3 < 0){ x3 = x3 + 29; }
else{ x3 = x3 - 29; }
}
y3 = (r*(x1 - x3) - y1);
while (y3< 0 || y3 >= 29){
if (y3 < 0){y3 = y3 + 29; }
else{ y3= y3 - 29; }
}
return Point(x3, y3);
}
int qiuk(){
Point p(13, 23);
Point pp = p;
for (int i = 0;; i++){
if (pp.getx() == 3 && pp.gety() == 28){
return (i + 1);
}
pp = pp.add(p);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "曲线E:y2=x3+4x+20 (mod 29)" << endl;
cout << "点P=(13,23),Q=(3,28)" << endl;
cout << "满足kP=Q的k是:" << endl;
cout <<qiuk()<<endl;
return 0;
}
文章浏览阅读1.4w次,点赞14次,收藏68次。前言我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工程源码导入到Android Studio中,导入后我们也可以通过断点调试,更加快速和准确地定位分析解决问题。操作步骤开发环境: Ubantu 20.4 Android Studio4.2 Android 11(R) 源码步骤一 1. 进入源码根目录,初始化系统环..............._怎么导入别人的android源码
文章浏览阅读2.8k次。// $ xxd -i logo.bmp logo.h#include //TO_DO ++++++++unsigned char logo_bmp[] = { 0x42, 0x4d, 0xde, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x0_bmp图片转成hex
文章浏览阅读837次。一、问题何为欲望?二、何为欲望 欲望(Desire)是由生物的本性产生的想达到某种目的的要求,欲望无善恶之分,关键在于如何控制。 欲望是世界上所有动物最原始的、最基本的一种本能。从人的角度讲是心理到身体的一种渴望、满足,它是一切动物存在必不可少的需求。一切动物最基本的欲望就是生存与存在。简单的来说就是 爱与不满足。 ...
文章浏览阅读269次。二手平台后台功能主要包括:管理员登陆、管理员管理、APP用户管理、留言评论管理、商品管理、商品发布等功能。1.在数据库设计方面,数据表是系统实现的一个难点,用户登录如何区分管理员还是普通用户,多个物品的种类价格处理,这些在数据库的设计上都是需要仔细考虑的;后端:Java+SSM。_基于springboot的校园二手商城交易微信小程序开题答辩问题
文章浏览阅读2k次,点赞4次,收藏6次。avue的一些配置1.表格option配置项<avue-crud :option="option" ref="crud" //表格常用事件 @on-load="getList"//这个事件会在表格所在的组件加载时就会执行后面的getList方法,初始化表格数据。并且当表格翻页或者pageSize变化时候也会自动执行该方法,这时候表格绑定的 :page.sync="page"中的page的值也会随时更新,当页面大小变化时,还会自己将页面变为1 如果使用了这个方法 其实表格的_avue dicurl 带参数
文章浏览阅读1.7k次。环境: MacOSX 11.5.2(intel) , Xcode 12.5.1Xcode 12.5.1 正常安装完成MonekeyDev后,能看到MonkeyDev的项目 ,但是Command Tool类型的项目无法编译,编译时报错:Showing Recent Messages unable to resolve product type 'com.apple.product-type.tool' for platform 'iphoneos'解决办法:使用记事本编辑: /Applicat_file /applications/xcode.app/contents/plugins/ideiossupportcore.ideplugin/co
文章浏览阅读213次。注意:执行该命令将会清除设备的所有配置信息,包括网络配置、安全策略等,并将设备恢复到出厂设置时的默认配置。在执行该操作之前,请务必备份重要的设备配置信息。启动后,网线接G5口web登陆https://192.168.254.1输入帐号密码admin/yunke1234!Console接入波特率9600,输入帐号密码admin/yunke1234!进入后输入facroryreset -R回车,设备自动重启。_dcn-waf怎么用console重置
文章浏览阅读747次。Sophus安装 SLAM 说明fmt安装未成功,安装8.1.1版本的fmt参考:解决办法 Ceres 2.0.0没有manifold.h 修改Sophus/test/ceres/CMakeLists.txt和 Sophus/test/core/CMakeLists.txt 中的下面这句话,使用2.1.0的版本_error: static assertion failed: cannot format an argument. to make type t fo
文章浏览阅读3.6k次。学习笔记_数据链路层的介绍
文章浏览阅读1.7k次,点赞2次,收藏5次。转载自:https://blog.csdn.net/miao19920101/article/details/75648491回调函数的使用回调函数在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针。1. 回调指针概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这..._回调函数的用法
文章浏览阅读792次。STM32F0xx的AD转换程序。 该例程使用的是PB01引脚,AD功能为ADC_IN9,查数据手册,如下图所示。 首先初始化引脚: void adc_init( void ){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE ); GPIO_InitSt..._stm32f0xx adc_in
文章浏览阅读1w次,点赞73次,收藏97次。01、注释也是写作据我所知,优秀的程序员都热爱写作(不止是狭义上的写博客)。如果你能举出一些例外,请一定转告我。为什么这么说呢?一个优秀的程序员想要分享一段开源的代码,假如别的程序员看不懂的话,他的挫败感一定会油然而生,除非他不想让别人看懂,但我觉得这样的话也没必要开源了吧。为了能够让别的程序员读懂他的代码并重用,他不仅要定义恰当的变量和方法,还得写上一些可读性高的注释。就像下面这样:p..._程序员写作