base64编码加密解密程序,输出有乱码,为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了base64编码加密解密程序,输出有乱码,为啥?相关的知识,希望对你有一定的参考价值。

base64.h编码头文件用的这个直接复制的:http://www.coolib.cn/show.asp?i=5513699&p=22

然后想借用这个头文件处理加密解密,接口定义为:
interface ICrypto : IDispatch

[id(1), helpstring("method encrypt")] HRESULT encrypt([in] BSTR bstrPlainText, [in] BSTR bstrPassword, [out, retval] BSTR *vCipherText);
[id(2), helpstring("method decrypt")] HRESULT decrypt([in] BSTR vCipherText, [in] BSTR bstrPassword, [out, retval] BSTR *bstrPlainText);
;

接口实现:

STDMETHODIMP CCrypto::encrypt(BSTR bstrPlainText, BSTR bstrPassword, BSTR *vCipherText)

// TODO: Add your implementation code here
_bstr_t b = bstrPlainText;

char* Text = b;
char m_strUserName[255];
Base64_Encode(Text, m_strUserName, strlen(Text));

*vCipherText = CComBSTR(m_strUserName);

return S_OK;


STDMETHODIMP CCrypto::decrypt(BSTR vCipherText, BSTR bstrPassword, BSTR *bstrPlainText)

// TODO: Add your implementation code here
char m_strUserName[255];

_bstr_t b = vCipherText;

char* Text = b;
Base64_Decode(Text, m_strUserName, strlen(Text));

*bstrPlainText = CComBSTR(m_strUserName);

return S_OK;


ASP调用测试:
<%
Set mDll = Server.CreateObject("CryptoProj.Crypto")
Dim a
a = mDll.encrypt("test des plaintext!","DFlt4DF")
REsponse.Write(a)
b = mDll.decrypt(a,"DFlt4DF")
REsponse.Write(b)
%>

输出为:dGVzdCBkZXMgcGxhaW50ZXh0IQ==test des plaintext!烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫锑?nQ_w?硗

为什么会有一串乱码呢?前面是对的,要怎么改才是正确的输出呢?

参考技术A 这个我也碰到过,要用memset(m_strUserName,0,sizeof(m_strUserName))来初始化m_strUserName数组.

以上是关于base64编码加密解密程序,输出有乱码,为啥?的主要内容,如果未能解决你的问题,请参考以下文章