С/С++
|
Java
|
Python
|
OpenSSL
|
java.math.BigInteger
|
PyCryptodome
|
Gcrypt
|
java.math.BigDecimal
|
Sage
|
GNU Multi-Precision Library(GMP)
|
Maple
|
General Multiprecision Python Project
|
Boost.Multiprecision
|
|
Numpy
|
NTL
|
|
|
Cropto++
|
|
|
C/C++ үлкен сандармен жұмыс жасауға арналған кітапханалар. GMP кітапханасы
C – 1969-1973 жылдары Bell Labs қызметкері Деннис Ритчи Би тілінің дамуы ретінде ойлап тапқан, статистикалық типтелген компиляцияланатын программалау тілі.
C++ – 1983 жылы Bell Labs фирмасының қызметкері Бьерн Страуструп ойлап тапқан статикалықтиптелген, компиляцияланатын программалау тілі [11].
OpenSSL - ашық бастапқы коды бар толық криптографиялық кітапхана, HTTPS веб-хаттамасында пайдаланылатын SSL/TLS кеңейтілуінен кеңінен танымал. Оған қоса, OpenSSL-да үлкен сандармен жұмыс істеуге арналған кірістірілген механизмі бар. Төменде үлкен санды квадратқа қою OpenSSL кітапханасының көмегімен жүзеге асқаны көрсетілген (9 - сурет):
#include
#include
#include
int main() {
BN_CTX *ctx = BN_CTX_new();
BIGNUM *mybignum = nullptr;
BIGNUM *mul = BN_new();
BN_dec2bn(&mybignum, "18446744073709551615"); // 2^64-1
BN_mul(mul, mybignum, mybignum, ctx);
char *dec = BN_bn2dec(mul);
if (dec) {
printf("%s\n", dec);
OPENSSL_free(dec);
}
BN_free(mybignum);
BN_free(mul);
}
Ескертпе – [12] әдебиет көзінен алынған
Сурет 9 OpenSSL кітапханасының көмегімен үлкен санды квадратқа қою
Gcrypt - кітапханасы GnuPG жобасынан туған және шифрлаумен, соның ішінде үлкен сандармен жұмыс істеу үшін негізгі функцияларды ұсынады. Осы кітапхананы қолданып, мысалды қайта көрейік (10 - сурет):
#include
#include
int main() {
unsigned long long mybignum = 18446744073709551615ull; // 2^64-1
gcry_mpi_t max_ul = gcry_mpi_new(64);
gcry_mpi_t mul = gcry_mpi_new(128);
size_t scanned = 0;
gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, &mybignum, sizeof(unsigned long long), &scanned);
assert(scanned==sizeof(unsigned long long) && "failed to scan the whole number");
gcry_mpi_mul(mul, max_ul, max_ul);
gcry_mpi_dump(mul);
gcry_mpi_release(mul);
gcry_mpi_release(max_ul);
}
Ескертпе – [12] әдебиет көзінен алынған
Сурет 7 Gcrypt кітапханасының көмегімен үлкен санды квадратқа қою
Boost.Multiprecision – негізінде бұл кітапхана үлкен сандармен жұмыс жасамайды, тек олармен жұмыс жасайтын С++ интерфейсінен тұрады (8 - сурет):
#include
#include
int main() {
using namespace boost::multiprecision;
int128_t mybignum = 18446744073709551615ull;
std::cout << mybignum * mybignum << std::endl;
}
Ескертпе – [12] әдебиет көзінен алынған
Сурет 8 Boost.Multiprprecision кітапханасының көмегімен үлкен санды квадратқа қою
GMP кітапханасы
GMP немесе GNU Multi-Precision Library – бүтін және рационалды сандарды есептеуге арналған Си тілінде жазылған кітапхана. Кітапхана криптографиялық мақсатта және компьютерлік есептеулер үшін кеңінен қолданылады. Бұл кітапхана gcc жинау үшін қажет [13].
GMP немесе GNU Multi-Precision Library (GNU жобасының бір бөлігі) – бұл бүтін сандармен, рационалды сандармен және құбылмалы нүктемен жұмыс істейтін еркін дәлдіктегі арифметикаға арналған Си тілінде жазылған кітапхана. GMP жұмыс істейтін машинада қолжетімді жадтан басқа практикалық дәлдік шектеулері жоқ. GMP функциялардың бай жиынтығы бар, ал функциялардың қарапайым интерфейсі бар.
GMP-ның негізгі мақсаты қосымшалар мен криптография саласындағы зерттеулер, интернетте қауіпсіздікті қамтамасыз етуге арналған қосымшалар, алгебра жүйелері, есептеу алгебрасының зерттеулері және т.б. болып табылады.
GMP кішкентай операндтар үшін де, үлкен операндтар үшін де барынша жылдам болу үшін мұқият жобаланған. Жылдамдыққа негізгі арифметикалық үлгі ретінде толық сөздерді пайдалану, жылдам алгоритмдерді пайдалану, көп процессорлар мен жылдамдыққа жалпы назар аудару үшін ең көп таралған ішкі циклдер үшін жоғары оңтайландырылған жинау коды есебінен қол жеткізіледі.
GMP-ның алғашқы шығарылымы 1991 жылы жасалды. Ол үнемі дамуда және қолданыста, ал жаңа шығарылымы жылына бір рет шығарылады.
6 нұсқасынан бастап, GMP Қос лицензия, GNU LGPL v3 және GNU GPL v2 арқылы таратылады
Бұл лицензиялар кітапхананы пайдалану, алмасу және жақсарту үшін тегін жасайды, сондай-ақ нәтижелерді беруге мүмкіндік береді. GNU лицензиялары еркіндік береді, бірақ еркін емес программаларды пайдалануға қатаң шектеулер қояды.
GMP-ның келесідей кітапханалары бар:
libgmpxx.a (С++ тілінде).
GMP бірнеше функция санаты бар:
Жоғары деңгейдегі бүтін арифметикалық функциялар (mpz). Бұл категорияда шамамен 150 арифметикалық және логикалық функциялар;
Жоғары деңгейдегі рационалды арифметикалық функциялар (mpq). Бұл санат 35 функциядан тұрады, бірақ mpz барлық функцияларды, оларды алымға және бөлгішке бөлек қолдана алады;
Өзгермелі нүктемен жоғары деңгейлі арифметикалық функциялар (mpf). Бұл GMP функциясының санаты C `double' түрі қолданба үшін жеткілікті дәлдікті бермесе қолданылады. Бұл категорияда шамамен 70 функция. Жаңа жобаларда mpf орнына әлдеқайда толық GMP mpfr кеңейтілген кітапханасын пайдалану ұсынылады;
C++ класстарының негізіндегі Интерфейс жоғарыда аталған барлық үшін. (C функциялары мен түрлері, әрине, C++ тікелей пайдаланылуы мүмкін);
Төмен деңгейлі оң-тұтас, күрделі пайдалану және өте төмен қызметтік функциялар mrpcategory. Жадыны басқару орындалмайды; шақырушы тарап нәтижелер үшін жеткілікті орынды қамтамасыз етуге тиіс. Функциялардың жиынтығы шақырушы интерфейс сияқты әрдайым тұрақты емес. Бұл функциялар ең аз мәнді сөз көрсеткішінен және осы аргументте қанша аяқ-қол (= сөз) бар екенін көрсететін бүтін өлшемнен тұратын жұп түрінде кіріс аргументтерін қабылдайды. Басқа санаттардағы функциялар барлық есептеулерге дерлік mpn тудырады. Осы функциялардың шамамен 60-ы жария болып табылады.
Төменде GMP кітапханасында құрастырылған санның факториялын есептейтін программа көрсетілген (9 - сурет):
Достарыңызбен бөлісу: |