本帖最后由 VisualEleven 于 2011-01-06 17:07:32 编辑

解决方案 »

  1.   

    openssl有个密码算法库,楼主需要的话还是用那个吧。
      

  2.   

    好像是没问题的,不过太短了这应该算是32bit的,常规应用至少是1024bit的,所以这应该是个学习用的。
      

  3.   


    //
    E      =   0x01, 0x00, 0x01, 
    //
    N      =   0xCF, 0x8A, 0x6C, 0xD1, 
    //
    D      =   0x36, 0x2B, 0x40, 0xE1, 
    //
    P      =   0xF5, 0x35, 
    //
    Q      =   0xD8, 0xAD, 
    //
    dP     =   0xD3, 0x3D, 
    //
    dQ     =   0x40, 0xE1, 
    //
    U      =   0xCB, 0xBF, 
    //
    input  =   0x12, 0x34, 0x00, 0x00, 
    //
    output =   0xB9, 0x5D, 0x1D, 0x3C, 这是rsa  32位的密钥,一会儿俺试试。
      

  4.   

    虽然写了个程序,但是没试出来结果// rsa_demo.cpp : Defines the entry point for the console application.
    //#include "stdafx.h"/******************************************************************************/
    //  名称:rsa_encrypt
    //  功能:RSA加密运算
    //  参数:n: 公钥n; e: 公钥e; mw: 加密明文; iLength: 明文长度; cw: 密文输出
    //  返回:无/******************************************************************************/
    void rsa_encrypt( int n, int e, char *mw, int mLength, int *&cw )
    {  
    int i=0, j=0;
    __int64 temInt = 0;

    for( i=0; i<mLength; i++ )
    {
    temInt = mw[i];

    if( e!=0 )
    {

    for( j=1; j<e; j++ )
    {

    temInt = ( temInt * (int)mw[i] ) % n;
    }
    }
    else
    {
    temInt = 1;
    }

    cw[i] = (int)temInt;
    }
    } int main(int argc, char* argv[])
    {
    //E = 0x01, 0x00, 0x01, 
    //N = 0xCF, 0x8A, 0x6C, 0xD1, 
    //D = 0x36, 0x2B, 0x40, 0xE1, 
    //P = 0xF5, 0x35, 
    //Q = 0xD8, 0xAD, 
    //dP = 0xD3, 0x3D, 
    //dQ = 0x40, 0xE1, 
    //U = 0xCB, 0xBF, 
    //input = 0x12, 0x34, 0x00, 0x00, 
    //output = 0xB9, 0x5D, 0x1D, 0x3C,  int e = 0x00010001;
    //int n = 0xcf8a6cd1;
    //int e = 0x01000100;
    int n = 0xd16c8acf;
    char mw[] = { 0x12, 0x34, 0x00, 0x00 };
    //char mw[] = { 0x00, 0x00, 0x34, 0x12 };
    int t[ 0x10 ];
    int *cw = t;

    rsa_encrypt( n, e, mw, 4, cw ); printf( "%.16X \r\n", t[ 0 ] ); //printf("Hello World!\n");
    return 0;
    }