Js调用 capicom控件 签名数据时,字符转码问题。

zhangbenqiang 2010-08-06 02:52:15
把一个登录页面中的用户名和用户密码(包含中文) 获取到

然后当做要签名的数据传递给capicom 控件内的 接口函数进行签名。

js 里面 字符串 是默认unicode编码保存的,当作为参数传递给capicom 时,在capicom内部 应该是 以双字节保存的,那么

我如何进行编码,把字符串编码成是单个字节的



var oSignedData = new ActiveXObject("CAPICOM.SignedData");
var oVerifyData = new ActiveXObject("CAPICOM.SignedData");
var oStore = new ActiveXObject("CAPICOM.Store");
var oSigner = new ActiveXObject("CAPICOM.Signer.2");

oStore.Open(CAPICOM_CURRENT_USER_STORE,CAPICOM_MY_STORE,CAPICOM_STORE_OPEN_READ_ONLY | CAPICOM_STORE_OPEN_EXISTING_ONLY);//以只读的方式打开个人存储区
oStoreCerts=oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_KEY_USAGE, CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE, true);//查找所有签名证书
oSelectedCerts = oStoreCerts.Select();//弹出证书选择框
var oSignerCert= oSelectedCerts (1);
oSigner.Certificate = oSignerCert;
oSignedData.Content=info;//这里的这个info 应该如何进行编码
var strSignedResult = oSignedData.Sign(oSigner,false, CAPICOM_ENCODE_BASE64);





oSignedData.Content=info;//上面的这个info 应该如何进行编码
...全文
260 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vickorfox 2011-12-05
  • 打赏
  • 举报
回复
顶,解决了我现在正在迷惑的问题,太谢谢了
satcon 2011-08-18
  • 打赏
  • 举报
回复
请问,如何将gb2312转化为utf-8啊????因为我的UKey设备只是别UTF-8编码格式。。。
zhangbenqiang 2010-08-06
  • 打赏
  • 举报
回复
自己顶一下。

这个问题我已经解决了。思路是这样的:

在js中编写一个unicode 转 utf8的 函数(网上直接copy别人的)


function UnicodeToUTF8(strInUni){
if(null==strInUni)
returnnull;
var strUni=String(strInUni);
var strUTF8=String();
for(var i=0;i<strUni.length;i++){
var wchr=strUni.charCodeAt(i);
if(wchr<0x80){
strUTF8+=strUni.charAt(i);
}
else if(wchr<0x800){
var chr1=wchr&0xff;
var chr2=(wchr>>8)&0xff;
strUTF8+=String.fromCharCode(0xC0|(chr2<<2)|((chr1>>6)&0x3));
strUTF8+=String.fromCharCode(0x80|(chr1&0x3F));
}
else{
var chr1=wchr&0xff;
var chr2=(wchr>>8)&0xff;
strUTF8+=String.fromCharCode(0xE0|(chr2>>4));
strUTF8+=String.fromCharCode(0x80|((chr2<<2)&0x3C)|((chr1>>6)&0x3));
strUTF8+=String.fromCharCode(0x80|(chr1&0x3F));
}
}
return strUTF8;
}



然后把获取到的utf8格式的代码 转换成ansi标准码

借助vbscript实现


Function Utf82Ansi2(unicodestring)
Dim lngLoop
Dim strChar
Ustr2Bstr = ""

For lngLoop = 1 to Len(unicodestring)
strChar = Mid(unicodestring, lngLoop, 1)
Utf82Ansi2 = Utf82Ansi2 & ChrB(AscB(strChar))
Next
End function


把最后获取到的值赋给info 即可

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧