📄 rsadesign.html
字号:
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>G:\RSA\RSADesign.cpp</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><meta name="generator" content="Code::Blocks Exporter plugin" /><style type="text/css"><!--body { color: #000000; background-color: #FFFFFF; }.style1 { color: #A0A0A0; }.style2 { color: #A0A0A0; }.style3 { color: #8080FF; font-weight: bold; }.style15 { color: #8080FF; font-weight: bold; }.style17 { color: #008080; }.style18 { color: #800000; }.style4 { color: #F000F0; }.style5 { color: #0000A0; font-weight: bold; }.style16 { color: #00A000; font-weight: bold; }.style6 { color: #0000FF; }.style12 { color: #0000FF; }.style7 { color: #E0A000; }.style8 { color: #000000; }.style9 { color: #00A000; }.style10 { color: #FF0000; }.style34 { color: #000000; background-color: #80FFFF; font-weight: bold; }.style35 { color: #FFFFFF; background-color: #FF0000; font-weight: bold; }--></style></head><body><pre><code><span style="font: 11pt Courier New;"><span class="style9">#include "RSA.h"#include <iostream>#include <stdlib.h></span><span class="style5">using namespace </span><span class="style11">std</span><span class="style10">;</span><span class="style5">long </span><span class="style11">MillerRabin</span><span class="style10">(</span><span class="style5">long </span><span class="style11">n</span><span class="style10">)</span><span class="style2">//Prime check, is return n;else return -1</span><span class="style10">{</span><span class="style2">//n-1=2^k * m </span><span class="style5">long </span><span class="style11">k</span><span class="style10">=</span><span class="style4">0</span><span class="style10">,</span><span class="style11">m</span><span class="style10">=</span><span class="style4">0</span><span class="style10">; </span><span class="style5">long </span><span class="style11">newn</span><span class="style10">=</span><span class="style11">n</span><span class="style10">-</span><span class="style4">1</span><span class="style10">; </span><span class="style5">for </span><span class="style10">(</span><span class="style5">long </span><span class="style11">i</span><span class="style10">=</span><span class="style4">0</span><span class="style10">; </span><span class="style11">m </span><span class="style10">==</span><span class="style4">0 </span><span class="style10">; </span><span class="style11">i</span><span class="style10">++) { </span><span class="style5">if </span><span class="style10">(</span><span class="style11">OddEvenTest</span><span class="style10">(</span><span class="style11">newn</span><span class="style10">)==</span><span class="style4">1</span><span class="style10">) { </span><span class="style11">m</span><span class="style10">=</span><span class="style11">newn</span><span class="style10">; </span><span class="style5">break</span><span class="style10">; } </span><span class="style5">else </span><span class="style10">{ </span><span class="style11">newn</span><span class="style10">=</span><span class="style11">newn</span><span class="style10">/</span><span class="style4">2</span><span class="style10">; </span><span class="style11">k</span><span class="style10">++; } }</span><span class="style2">// cout << "n-1 =" << n-1 <<" "<< "k m"<<k <<" "<<m<<endl;//get a ;1<=a<=n-1 </span><span class="style5">long </span><span class="style11">tempa</span><span class="style10">[</span><span class="style11">MAX_N</span><span class="style10">]={</span><span class="style4">0</span><span class="style10">}; </span><span class="style5">for </span><span class="style10">(</span><span class="style5">long </span><span class="style11">i</span><span class="style10">=</span><span class="style4">0</span><span class="style10">; </span><span class="style11">i</span><span class="style10"><</span><span class="style11">MAX_N </span><span class="style10">;</span><span class="style11">i</span><span class="style10">++) </span><span class="style11">tempa</span><span class="style10">[</span><span class="style11">i</span><span class="style10">]=</span><span class="style11">i</span><span class="style10">; </span><span class="style11">srand</span><span class="style10">((</span><span class="style5">unsigned</span><span class="style10">)</span><span class="style11">time</span><span class="style10">(</span><span class="style11">NULL</span><span class="style10">)); </span><span class="style5">long </span><span class="style11">a </span><span class="style10">= </span><span class="style11">tempa</span><span class="style10">[</span><span class="style11">rand</span><span class="style10">()%(</span><span class="style11">n</span><span class="style10">-</span><span class="style4">1</span><span class="style10">)];</span><span class="style2">//b= a^m % n </span><span class="style5">long </span><span class="style11">Binary_m</span><span class="style10">[</span><span class="style4">100</span><span class="style10">];</span><span class="style2">//Binary of m </span><span class="style5">long </span><span class="style11">l_m</span><span class="style10">;</span><span class="style2">//length of m </span><span class="style11">l_m</span><span class="style10">=</span><span class="style11">NumberToBinary</span><span class="style10">(</span><span class="style11">Binary_m</span><span class="style10">, </span><span class="style11">m</span><span class="style10">); </span><span class="style5">long </span><span class="style11">b</span><span class="style10">=</span><span class="style11">SquareMultiply</span><span class="style10">(</span><span class="style11">Binary_m</span><span class="style10">, </span><span class="style11">n</span><span class="style10">, </span><span class="style11">a</span><span class="style10">, </span><span class="style11">l_m</span><span class="style10">); </span><span class="style5">if </span><span class="style10">((</span><span class="style11">b</span><span class="style10">%</span><span class="style11">n</span><span class="style10">)==</span><span class="style4">1</span><span class="style10">) </span><span class="style5">return </span><span class="style11">n</span><span class="style10">; </span><span class="style5">for </span><span class="style10">(</span><span class="style5">long </span><span class="style11">i</span><span class="style10">=</span><span class="style4">0</span><span class="style10">; </span><span class="style11">i</span><span class="style10"><=</span><span class="style11">k</span><span class="style10">-</span><span class="style4">1</span><span class="style10">; </span><span class="style11">i</span><span class="style10">++) { </span><span class="style5">if </span><span class="style10">((</span><span class="style11">b</span><span class="style10">%</span><span class="style11">n</span><span class="style10">)==</span><span class="style11">n</span><span class="style10">-</span><span class="style4">1</span><span class="style10">) </span><span class="style5">return </span><span class="style11">n</span><span class="style10">; </span><span class="style5">else </span><span class="style11">b</span><span class="style10">=(</span><span class="style11">b</span><span class="style10">*</span><span class="style11">b</span><span class="style10">)%</span><span class="style11">n</span><span class="style10">; } </span><span class="style5">return </span><span class="style10">-</span><span class="style4">1</span><span class="style10">;}</span><span class="style5">long </span><span class="style11">OddEvenTest</span><span class="style10">(</span><span class="style5">long </span><span class="style11">n</span><span class="style10">)</span><span class="style2">//if odd return 1, even return 2</span><span class="style10">{ </span><span class="style5">long </span><span class="style11">m </span><span class="style10">= </span><span class="style11">n</span><span class="style10">%</span><span class="style4">2</span><span class="style10">; </span><span class="style5">if </span><span class="style10">(</span><span class="style11">m</span><span class="style10">==</span><span class="style4">0</span><span class="style10">) </span><span class="style5">return </span><span class="style4">2</span><span class="style10">; </span><span class="style5">else return </span><span class="style4">1</span><span class="style10">;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -