2012-01-23 2 views
-1

아래 코드에서 어떤 문제가 있었는지 알고 싶습니다.AES EncryptN BADA 솔루션

저는 NFC와 서버 연결을 사용하여 Bada의 솔루션을 개발하는 대학 팀의 일원입니다. 우리가 비록 AES 암호화를 사용 한 COMUNICATION를 암호화하려면,하지만 다음과 같은 오류가 중지 해요 : 입력 및 keylength 내가 코드에서 이해 무엇 16 의 배수 여야합니다

String 
ReadForm::aesEncryp(Osp::Base::String ip, Osp::Base::String mac, Osp::Base::String msg) 
{ 
AppLog("<<<<<<<<<<<<<< aesEncrypt Start >>>>>>>>>>>>>>>>>>>>>>>>>"); 

Osp::Text::Utf8Encoding utf8Enc; 
Osp::Text::AsciiEncoding* dato = new Osp::Text::AsciiEncoding(); 
result r; 



//msg 
ByteBuffer* pbuffer=dato->GetBytesN(msg); 
AppLog("asigno mensaje: %ls", msg.GetPointer()); 
int messageLen; // msg.GetLength()*8; 
r=dato->GetByteCount(msg,messageLen); 
AppLog("obtiene bytes: %s", GetErrorMessage(r)); 
byte message[messageLen+1]; 
r=pbuffer->GetArray(message,0,messageLen); 
AppLog("Establece mensaje en array: %s", GetErrorMessage(r)); 


// KEY: 16 bytes 
int secretKeyLen; 
ip="xxxxxxxxxxxxx"; 
r=dato->GetByteCount(ip,secretKeyLen); 
AppLog("obtiene bytes: %s", GetErrorMessage(r)); 
pbuffer=null; 
pbuffer=dato->GetBytesN(ip); 
    byte secretKey[secretKeyLen+1]; 
r=pbuffer->GetArray(secretKey,0,secretKeyLen); 
AppLog("Establece key en array: %s", GetErrorMessage(r)); 


// IV: 16 bytes 
int ivectorLen; 
String ivM="xxxxxxxxxxxx"; 
pbuffer=null; 
pbuffer=dato->GetBytesN(ivM); 
r=dato->GetByteCount(ivM,ivectorLen); 
AppLog("obtiene bytes: %s", GetErrorMessage(r)); 
byte ivector[ivectorLen+1]; 
r=pbuffer->GetArray(ivector,0,ivectorLen); 
AppLog("Establece vector en array: %s", GetErrorMessage(r)); 


String transformation; 
ISymmetricCipher *pCipher = null; 
SecretKeyGenerator *pKeyGen = null; 
ISecretKey *pKey = null; 
ByteBuffer input; 
ByteBuffer *pOutput = null; 
ByteBuffer keyBytes; 
ByteBuffer iv; 
//msg 
input.Construct(messageLen+1); 
input.SetArray(message, 0, messageLen); 
input.Flip(); 
//key 
keyBytes.Construct(secretKeyLen+1); 
keyBytes.SetArray(secretKey, 0, 16); 
keyBytes.Flip(); 
//vector 
iv.Construct(ivectorLen); 
iv.SetArray(ivector, 0, ivectorLen); 
iv.Flip(); 

//cifrado 
pCipher = new AesCipher(); 
transformation = "CBC/128/NOPADDING"; 
pCipher->Construct(transformation,CIPHER_ENCRYPT); 
AppLog("AesCipher construct:%s", GetErrorMessage(r)); 
pKeyGen = new SecretKeyGenerator(); 
pKeyGen->Construct(keyBytes); 
pKey = pKeyGen->GenerateKeyN(); 
if (pKey==null){ 
    r = GetLastResult(); 
    AppLog("Generate -> pKey Esnulo: %s",GetErrorMessage(r)); 

    } 

r=pCipher->SetKey(*pKey); 
AppLog("AesCipher setKey:%s", GetErrorMessage(r)); 

r=pCipher->SetInitialVector(iv); 
AppLog("AesCipher setInitialVector:%s", GetErrorMessage(r)); 

//encripto 

pOutput = pCipher->EncryptN(input); <---------- returns null why!!!!!!!!!!! 
if (pOutput==null){ 
    r = GetLastResult(); 
    AppLog("pOutput nulo: %s",GetErrorMessage(r)); 

} 
AppLog("Encriptado"); 


//preparo para devolver 
Osp::Text::AsciiEncoding* as = new Osp::Text::AsciiEncoding(); 
as->GetString(*pOutput,ResultadoAes); 

AppLog("aes= %ls", ResultadoAes.GetPointer()); 
AppLog("<<<<<<<<<<<<<< aesEncrypt Finish >>>>>>>>>>>>>>>>>>>>>>>>>"); 
return ResultadoAes; 
} 
+0

실제로 GetErrorMessage가 무언가를 인쇄합니까? –

답변

1

, 메시지의 길이는 당신이 입력 및 keybytes에 대한 ByteBuffer를 구축하는 NOPADDING을 사용하고 있기 때문에 또한 8

의 다수는 여전히 문제가 점점 넣다가, 마지막으로 16

정확히 여러 있는지 확인하십시오 확인하십시오 r에서 가져 오는 오류 메시지를 게시하십시오. = GetLastResult()