0
私はこれを小さな番号にも対応できます。大きな数字でも暗号化はうまくいきます。ただし、復号化装置には問題があります。誰かが私を助けることができますか?128bits-C++用のRSAユニットの実装
main()
{
//__uint128_t secret=((__uint128_t)3502532219136638976) <<64 |1161929539123609600;
//__uint128_t pvtkey=((__uint128_t)14605469131018042215) <<64 |1281687108645159073;
//__uint128_t n=((__uint128_t)16156614574048939703) <<64| 17372945349702060311;
decrypt(1434,1293,2491);
}
__uint128_t decrypt(__uint128_t secret,__uint128_t pvtkey,__uint128_t n)
{
cout<< "Decrypting..."<<"\n";
__uint128_t imsg_copy2=pvtkey;
uint64_t imsg64_lo2,imsg64_hi2;
imsg64_lo2=imsg_copy2;
imsg_copy2=imsg_copy2>>64;
imsg64_hi2=imsg_copy2;
cout << "Pvt key recvd here:"<<imsg64_lo2<<"\n";
cout << "Pvt key recvd here hi:"<<imsg64_hi2<<"\n";
__uint128_t r=1;
int ctr=0;
while(1)
{
if(((__uint128_t)pvtkey)%2==1)
{r=(((__uint128_t)r)*((__uint128_t)secret))%((__uint128_t)n);
cout<<" r:" << r << "\n" ;
}
// cout <<"Dividing";
pvtkey=((__uint128_t)pvtkey)/2;
cout << "r:";
printf_128(r);
cout << ctr << "\n";
if(pvtkey==0)
break;
cout<<"secret:";
secret=(((__uint128_t)secret)*((__uint128_t)secret)%((__uint128_t)n));
printf_128(secret);
ctr++;
cout << "Decryption inside function_lo:"<<"\n";
printf_128(r);
return ((__uint128_t)r);
}
void printf_128(__uint128_t v)
{
__uint128_t imsg_copy=v;
uint64_t imsg64_lo,imsg64_hi;
imsg64_lo=imsg_copy;
imsg_copy=imsg_copy>>64;
imsg64_hi=imsg_copy;
cout <<imsg64_hi<<imsg64_lo<<"\n";
}
したがって、この関数を小さい数値に実行すると、復号化ユニットが正常に動作します。しかし、大規模な公開鍵でこれを行うと、すべての値が0に設定されます。誰かを助けることができますか?
すべての値は0に設定されますか?それはいくつかのブレークポイントで追跡するのが本当に簡単です。 –
これらの(__uint128_t)キャストの大半は、すべてではないにせよ、不要で混乱しているようです。 –