📄 ecc_samle.cpp
字号:
/*
公钥加密解密演示。使用前 #include <tomcrypt.h>
核心函数ecc_private_encrypt,ecc_public_decrypt为Rinick基于tomcrypt而编写
不是tomcrypt原始内容,但已编译在lib中(见源文件ecc_sys.c)
拥有密钥的人可以加密解密
拥有公钥的人只能解密,不能加密
*/
/*
用于软件加密的思路
用户:安装~向编程者提交系统特征(如硬件序列号)
编程者:得到特征~将特征与某些其他信息结合~私钥加密~密文(序列号)交给用户
用户:输入序列号
程序执行中:密文用公钥解密,并根据系统特征得到某些信息,用于判断序列号是否正确。
也可用于交换其他关键数据,解密错误得不到数据那么程序执行中必然出错
用户即使知道你的加密解密算法,因为只能解密,无法从自己的硬件生成序列号
*/
/*
下面的程序实现的功能:
用密钥将in中的内容,加密放在out里
*/
{
//随机数状态初始化
int pn=register_prng(&rc4_desc);//随机数生成方式,可以选择其他方式,参考crypt.pdf第56页
prng_state tg;
prng_descriptor[pn].start(&tg);
prng_descriptor[pn].add_entropy("add anything here",17,&tg);//17是字符串长度
//修改参数取得不同的随机初始化,也可借用windows随机数来初始化
//最好不要每次使用相同的随机初始化,以防留有漏洞
prng_descriptor[pn].ready(&tg);
//这里导入你的私钥代码,请用ecc_makekey生成代码
#include "private_key.c"
char in[]="hello,world";//需要加密的内容(不一定要asc字符)
char out[100];//输出密文的存放
unsigned long outlen=100;//密文输出的最大长度(实际上根据密钥是个固定的值)
ecc_private_encrypt(in, 11,out, &outlen,&tg, pn, &myKey);
//将in用密钥加密后存再out里,11是输入长度,输入长度的比特(长度×8)不能超过比椭圆曲线的比特数
//加密完成后outlen会改变为实际的输出长度
}
/*
下面的程序实现的功能:
用公钥匙将out中的内容解密,放在results里
*/
{
//首先取得上述程序的结果 out, outlen
//这里导入你的公钥代码,请用ecc_makekey生成代码
#include "public_key.c"
char results[100];//输出存放
unsigned long resultlen=100;//输出的最大长度
ecc_public_decrypt(out, outlen,results,&resultlen, &myKey);
//解密,参数作用同上,输出放在results中
//运行后resultlen应等于输出长度,若不等,可能原始信息前几字节为全0
//需要自己作适当控制(限制输入开头字节不为0,或输出长度不够时在前面补0)
}
/*
如以上内容有错误,或有疑问——————>rinick@goozo.net
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -