注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之三十八AndroidStudio中Char*和Jstring的相互转换(三十五)补遗  

2015-08-03 18:24:40|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之三十八AndroidStudioChar*Jstring的相互转换(三十五)补遗

在三十五中,谈过两种字符相互转换的问题,但在调试的过程中发现了一些问题,那就是在遇到一些特殊字符时,两种转换还是有一些问题的,导致在TLV格式的解析是数据传送时,引起异常,身份验证无法过去。

 

JNI库:

JNIEXPORT jbyteArray JNICALL Java_com_irisking_testmatcher_MatcherContainer_authenticate(
        JNIEnv *env, jobject obj, jstring aaid,
jbyteArray challenge,jint result)
{
   
char* ret = "";

//    int challengeLen = 0;
//    char* transChallenge = JstringToChar(env,challenge, &challengeLen);
       
LOGI("enter jni authenticate");

    jbyte* arrayBody = (*env)
->GetByteArrayElements(env, challenge, 0);
    jsize theArrayLength = (*env)
->GetArrayLength(env, challenge);
    UINT8* pChallenger = (UINT8*)arrayBody;

   LOGI(
"jni after pChallenger");

    LOGI(
"jni get from matcher challenge len=%d, uvt size = %d",
        theArrayLength,
sizeof(UVT));

//    return stoJstring(env,
//                GenerateTlvUvt(result, transChallenge, challengeLen),
//                sizeof(GeneralUvt));
   
return byteTojbyteArray(env,
                  GenerateTlvUvt(result, pChallenger, theArrayLength),
                 
sizeof(GeneralUvt));
}

Java应用:

public String authenticateData(int result){
   
//String sResult = "";

  
 byte [] bResult =  mc.authenticate(this.aaid, bChallenge, result);

   
StringBuffer sb = new StringBuffer();
   
for(int i=0;i<bResult.length;i++){
       
int v = bResult[i]& 0xFF;
       
String hv = Integer.toHexString(v);
       
if(hv.length()!=2){
            hv=
"0"+hv;
       
}
        sb.append(hv+
" ");
       
if(i%8==0){
            sb.append(
"\n");
       
}
    }
    Log.i(
"%s",sb.toString());
   
String b64UVT = Base64.encodeToString(bResult,Base64.URL_SAFE);

   
String userID = mc.getStringFromMatcher();

   
JsonUIOut jsonOut = new JsonUIOut();
   
jsonOut.setUVT(b64UVT);
   
jsonOut.setUserID(userID);
   
if (result==1){
       
// 1 表示成功
       
jsonOut.setState(true);
   
}
   
else {
        jsonOut.setState(
false);
   
}

    String jsonresult = jsonOut.serialize()
;

   
return  jsonresult;
}

来回都改成用BYTE数组了,这样更简单,更方便。实践是检验真理的唯一标准啊。

 

 

  评论这张
 
阅读(237)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017