NTL的安装、连接与使用(基于CentOS、Clion)

1、安装 m4

 sudo apt-get install m4

2、安装gmp

在网站https://ftp.gnu.org/gnu/gmp/下载gmp文件,解压 gmp-6.0.0a.tar.lz 文件,并安装。

解压 gmp 压缩包

 tar -xf gmp-6.0.0a.tar.lz

然后安装

 cd gmp-6.0.0
 ./configure
 make
 make check
 sudo make install

3、安装NTL

Download NTL (libntl.org)

下载NTL(ntl-11.5.1.tar.gz)后解压,然后切换文件夹

tar ntl-11.5.1.tar.gz
cd ntl-11.5.1/src

进行安装

./configure

make

make check

sudo make install

4、检查看是否安装成功(有无ntl相关文件)

ls /usr/local/include
ls /usr/local/lib

5、打开Clion编译软件

修改cmake.list

cmake_minimum_required(VERSION 3.23)
project(test02)

set(CMAKE_CXX_STANDARD 14)
# 声明位置
LINK_DIRECTORIES(/usr/local/lib)

link_libraries(/usr/local/lib/libntl.a)
#被链接的库相对路径
link_directories(/usr/local/lib /lib)
#被链接库的头文件相对路径
include_directories(/usr/local/include)

add_executable(ecc main.cpp)

target_link_libraries(ecc -lm -lgmp -lntl -lpthread)

6、运行例子

#include<iostream>
#include<NTL/ZZ.h>
using namespace NTL;

int main(){
    ZZ p, q, n, phi_of_n, public_key, private_key, message;
    int no_of_bits;

    std::cout<<"Enter no of bits : ";
    std::cin>>no_of_bits;

    // generating p and q prime numbers
    p = GenPrime_ZZ(no_of_bits, 80);
    q = GenPrime_ZZ(no_of_bits, 80);
    n = p * q;
    phi_of_n = (p-1)*(q-1);

    ZZ i = (ZZ)1;
    long bits_of_n = 0;
	for( ; i <= n; i *= 10) { 
        bits_of_n++; 
    }

    public_key = GenPrime_ZZ(bits_of_n/2, 80);
	private_key = InvMod(public_key, phi_of_n);

    std::cout<<"\nEnter Message to decrypt : ";
    std::cin>>message;

    // Encryption of message using public key
    ZZ encrypted_message = PowerMod(message, public_key, n);
    ZZ decrypted_message = PowerMod(encrypted_message, private_key, n);

    std::cout<<"\np = "<<p<<"\n";
    std::cout<<"\nq = "<<q<<"\n";
    std::cout<<"\nn = "<<n<<"\n";
    std::cout<<"\nphi of n = "<<phi_of_n<<"\n";
    std::cout<<"\npublic key = "<<public_key<<"\n";
    std::cout<<"\nprivate key = "<<private_key<<"\n";
    std::cout<<"\nprivate key * public key (mod phi_of_n)= "<<MulMod(public_key, private_key, phi_of_n)<<"\n";
    std::cout<<"\nEncrypted Message = "<<encrypted_message<<"\n";
    std::cout<<"\nDecrypted Message = "<<decrypted_message<<"\n";
    return 0; 
}

8、成功运行未报错,如下图所示

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值