2012-07-17 49 views
1

1)我能夠加密和在Symbian與我的應用程序生成的值解密用以下值RSA跨平臺的B/W JAVA&塞班

  RInteger iE = RInteger::NewL(0x10001);    
      RInteger iN = RInteger::NewL(_L8("\xa3\x92\xb7\x34\x82\xbe\x7f\x4f\x8f\xbd\xfb\xd4\xf9\x80\x76\xe0\xa3\xf7\x42\x60\x8e\xe2\xa8\x6b\x76\x22\x67\x0e\x94\xeb\x9b\x3f\xd0\x73\x58\xe0\x23\xbb\x25\x53\x82\x56\x7b\x3e\x05\x57\xc9\x50\x3c\x2d\x6a\x09\x66\x3f\x49\xee\x41\x4c\x4b\x95\x1e\x7d\xb8\xd1\xc5\x40\x0d\xd0\xca\x72\xc8\xf6\x0d\x21\x4f\x63\xc1\x4c\x3b\x93\x94\x1f\x67\x5b\x70\x33\x07\xfd\x4e\x71\x59\x7f\x79\x9b\xd8\xf6\x3b\x35\xe1\x9a\xd3\x27\x43\xdb\x32\xcd\x7b\x78\x40\xd1\x0d\x40\x12\x53\xb7\x19\x66\xca\x5b\xf6\x26\x2a\xea\x4e\xef\xe4\xc8\x41")); 
      RInteger iD = RInteger::NewL(_L8("\x44\x21\x5a\xff\x9b\x29\x7f\x5b\x83\x32\x8d\x8f\x02\xb1\x18\x52\xae\xd8\xd1\x23\xe8\xbf\xcd\x88\x9c\xf6\xed\x57\xec\x7d\x49\xf7\xc5\x7a\x15\xdd\x9d\xe4\x58\x42\xb5\x3a\x12\x31\x1e\x06\x97\x8a\x3c\xd6\x69\xa1\x2a\x9e\x57\xcb\xce\x14\xda\x32\x6d\x35\xce\x61\x9e\xb2\xaf\x5c\x04\x13\xef\x68\x43\x7e\xe4\x98\xdc\x87\x2e\x7e\x38\x5f\xbd\xe9\x2e\xc1\xf1\x94\xf3\x95\x56\x56\xa4\x78\x26\x70\xa4\x1e\x10\x61\xe9\x45\x25\x1c\xed\xc6\xc0\x1e\xf6\x2c\xa0\x27\xee\x19\x0a\xed\x1c\x76\x33\xc8\x37\xde\x76\x25\x1c\x70\x77\xb1")); 

2)接收N,E從服務器& d值然後生成公鑰&私鑰。 (a)用app中的公鑰加密,並在服務器端解密成功。 但 (b)無法用我的應用中的私鑰解密得到KErrInvalidPadding。 (c)即使服務器加密的消息不能在應用程序中解密得到相同的錯誤KErrInvalidPadding。

代碼:

 RInteger iE = RInteger::NewL(0x10001);   
     RInteger iN = RInteger::NewL(_L8("\x89\x03\xfb\x6d\x15\xf3\x52\xed\x3b\x45\xad\xd3\x21\x6f\x63\x2f\x71\x39\x95\x4a\x56\x31\x33\x7a\xba\x7d\x64\x5e\xd3\x84\x82\xe3\xa8\x10\xb4\xdb\x26\xaa\xb4\xd1\xdf\x58\xc1\x47\x23\x0f\x0c\x75\x63\x1a\x3d\xd0\x55\x4b\x50\xde\x44\xe7\x9f\x4f\xcf\x20\x5c\x89\xfd\x3f\x80\xe0\xff\x8d\x16\xc2\xe9\xf5\x6e\xd3\xab\x17\x79\x53\xd5\x4c\x9c\x30\x35\x7d\x04\xe6\x77\xce\xdd\x99\x12\x90\x6e\xf8\xa0\x46\xd7\xb0\x18\x5b\x7f\x20\x22\xa8\xe4\x35\xb0\xc6\xec\xae\xf9\x3f\x08\x9f\xc3\xaa\x3f\x36\x77\x55\x0b\x5d\x84\x20\x46\xc7")); 
     RInteger iD = RInteger::NewL(_L8("\x35\xb9\x42\xff\x9d\xe8\xbf\xae\x57\x5c\x55\xf1\x00\x1e\x2d\xd4\xef\x5f\x75\xc3\x25\x12\xbb\xad\xb6\xab\xee\x0c\x24\x81\xc3\xd4\xc2\x14\x72\xe5\xaf\x3e\xa6\x11\xd8\xb2\x73\x6e\x92\x37\x97\x59\xfb\xd6\xd1\x3f\xfc\x01\xc1\x1e\xb6\x03\xdf\xfa\xaa\x2b\x75\x3c\xed\xc6\x8a\x02\x58\xb6\x8d\x6d\xf8\x34\x65\x03\xe3\x8a\x15\x37\xdf\x12\xa8\x18\xff\xce\xfa\x20\x20\xd6\xb7\x1a\x05\x6f\x2c\x04\x13\x58\x62\x94\xe9\xbc\x63\xc8\xd3\xd6\x06\x61\x44\x3e\xac\xe4\x98\x14\x63\xb1\xf7\x06\xaf\x1c\x16\xb6\x5b\x87\x87\x8e\x26\x01"));   

     TBuf8 <1024>aaaa; 
     TBuf8 <1024>aOut; 

     CRSAPublicKey *iPubKey = CRSAPublicKey::NewL(iN,iE); 
     CRSAPrivateKey *iPriKey = CRSAPrivateKeyStandard::NewL(iN,iD); 
     CRSAPKCS1v15Encryptor *iEncr = CRSAPKCS1v15Encryptor::NewL(*iPubKey); 
     CRSAPKCS1v15Decryptor *iDecry = CRSAPKCS1v15Decryptor::NewL(*iPriKey); 

     TRAPD(err3,iEncr->EncryptL(_L8("Hi"),aaaa)); 
     TRAPD(err2,iDecry->DecryptL(aaaa,aOut)); <-KErrInvalidPadding = -11003; 

如何解決這個問題,有人建議我用這個。

+0

沒有評論?建議!! ?? – poppy 2012-07-18 07:16:23

+0

這些函數對「原始」密鑰執行操作,而使用OpenSSL進行簽名時,證書文件涉及輸入數據的一些填充,這在Symbian下不能正確執行。這個鏈接可能會給你一些提示:http://jonmccune.wordpress.com/2008/06/05/symbian-os-v91-c-cryptography-apis-available/ – MrTJ 2012-07-20 13:40:11

+0

謝謝,但這是關於驗證者和簽名者,我dint有如何解決KErrInvalidPadding?任何一個人都可以幫助我? – poppy 2012-07-23 12:02:42

回答

0

我該怎麼辦

TInt len=iEncr->MaxOutputLength(); 
iEncr->EncryptL(_L8("Hi"),aaaa); 
if (aaaa.Length()<len){ 
    TBuf8<1> t; 
    t.SetLength(1);t[0]=0; 
    aaaa.Insert(0,t); 
}