阿远之生当为

2013年3月17日 #

修复远程桌面网关

突然有一天,在iis服务器上上了一个新站点后,远程桌面网关连不上了。找不到原因,于是我把rpc和rpcwithcert两个虚拟目录给删了。然后手动配置

C:\Windows\System32\inetsrv\config\applicationHost.config文件,配了多次仍然不行。于是把rpc onver htpp proxy反复安装,rpc和rpccert虚拟目录完全没任何变化,无论我是否建立还是删除。

数日后我灵光一闪,会不会配置在注册表里,在网上搜到到rpcproxy所在的注册表目录,hklm\software\microsoft\rpc\rpcprox,把此目录删除,再把iis中的虚拟目录删除。然后重装rpc over http proxy,这货终于给我自动建产了rpc虚拟目录。然后再装远程桌面网关,还是不行。浏览iis的rpc里的文件,报500.19错误。上网查了下,有人说是因为在64位系统里启用了32位的设置引起的。于是我才恍然大悟,我上站点那天,新程序的功能只能在32位下跑,我把程序池改成32位的了。于是我把程序池改成64位的,再用远程桌面终端去连,终于见到久违的登录界面,大功告成。

posted @ 2013-03-17 23:17 muroachanf 阅读(319) | 评论 (0)编辑 收藏

php在iis中安装后出现500问题的解决方法

花了两个小时解决php总是配置不对的问题,原因是Microsoft Visual C++ 2008 Redistributable Package没有安装,查起来还很费了点工夫。用procmon跟踪一切都觉得很正常,最后无意中发现php-cgi.exe启动就退出了。然后手工执行,会报错,怀疑有病毒,然后拷了一个正确的版本过去,还是报错。查看日志,发现vc2008运行包问题,安装后即正常。

posted @ 2013-03-17 23:16 muroachanf 阅读(287) | 评论 (0)编辑 收藏

2012年6月13日 #

全局变量之苦

最近弄个项目,突然有点偏爱全局变量了,于是乎罔顾教科书的教诲,大用特用,一下就遇到了两个问题,兹记于此,以作教训。
1、由于搞某种设备的读写,针对每种设备写一个工厂类;然后声明一个设备管理类的全局变量,在构造函数里把工厂类全注册到设备管理类中。后来觉得这样不好,每加一种设备都要改构造函数的代码,于是我就写了一个注册类,在构造函数里进行注册,然后在每个设备类的cpp里声明注册类的全局变量。
看起来很完美,于是我打了个lib,弄到另一个dll工程里编译,结果就悲剧了,注册类的构造函数死活不运行。最后发现,编译器认为这个cpp的任何symbol都没被引用,根本就不编译进来,最后只好改回去。

2、而后我又在dll工程里声明了一个全局变量,然后在全局变量的构造函数里,调用设备类的全局变量的成员获取设备列表,结果发现取出来是空的。最后发现,设备类的构造函数在取设备列表时还没有被调用,把初始化的代码移到MFC的app.InitInstance里调用解决问题。

总结下:1、在c#、delphi里用得很顺的工厂注册类,在c++里是会被优化掉的,千万用不得 2、任何情况下,不应在全局变量的构造函数里引用其他全局变量,这条应该不限于c++。

posted @ 2012-06-13 23:11 muroachanf 阅读(319) | 评论 (2)编辑 收藏

2011年12月26日 #

openssl加密

最近搞了下openssl 的加密,做个mark,csdn这破货用不起了

rsa生成密钥对


void ConvertToArray(ostream& stream, const string& name, unsigned char* buf, size_t size)
{
    stream 
<< "const unsigned char " << name << "[" << size << "] = {" << endl;
    
for (size_t i = 0; i < size; i++)
    {
        
if (i != 0)
            stream 
<< ",";
        stream 
<< (int)buf[i];
    }
    stream 
<< endl << "};" << endl << endl;
}
void ConvertToArray(ostream& stream, const string &name, RSA* key, bool isPrivate)
{
    
int size = 0;
    
if (isPrivate)
        size 
= i2d_RSAPrivateKey(key, NULL);
    
else
        size 
= i2d_RSAPublicKey(key, NULL);
    
if (size < 0)
    {
        cout 
<< "SaveRsKey error" << endl;
        
return;
    }
    unsigned 
char* prkey = new unsigned char[size + 20];
    unsigned 
char *= prkey;
    
if (isPrivate)
        size 
= i2d_RSAPrivateKey(key, &p);
    
else
        size 
= i2d_RSAPublicKey(key, &p);
    
if (size < 0)
    {
        cout 
<< "SaveRsKey error" << endl;
    }
    
else
    {
        ConvertToArray(stream, name, prkey, size);
    }
    delete[] prkey;
}
void SaveRSAKey(const string& fileName, RSA* key, bool isPrivate )
{
    
int size = 0;
    
if (isPrivate)
        size 
= i2d_RSAPrivateKey(key, NULL);
    
else
        size 
= i2d_RSAPublicKey(key, NULL);
    
if (size < 0)
    {
        cout 
<< "SaveRsKey error" << endl;
        
return;
    }
    unsigned 
char* prkey = new unsigned char[size + 20];
    unsigned 
char *= prkey;
    
if (isPrivate)
        size 
= i2d_RSAPrivateKey(key, &p);
    
else
        size 
= i2d_RSAPublicKey(key, &p);
    
if (size < 0)
    {
        cout 
<< "SaveRsKey error" << endl;
    }
    
else
    {
        ofstream f(fileName.c_str(), ios_base::
out | ios_base::binary);
        
if (!f)
        {
            cout 
<< "SaveRsKey error" << endl;
        }
        
else
        {
            
//ConvertToArray()
            f.write((char*)prkey, size);
            f.close();
        }
    }
    delete[] prkey;
}
void GenKeys()
{
    ostringstream keys;
    ofstream fpbtext(
"f:\\pbkeys.txt", ios_base::out);
    ofstream fprtext(
"f:\\prkeys.txt", ios_base::out);
    
for (int i = 0; i < 10; i++)
    {
        ostringstream ps, ks, pn, kn;
        ps 
<< "f:\\key" << i << ".pbk";
        pn 
<< "pbk" << i;
        ks 
<< "f:\\key" << i << ".prk";
        kn 
<< "prk" << i;
        RSA 
*key = RSA_generate_key(512, RSA_F4, NULL, NULL);
        
//SaveRSAKey(ps.str(), key, false);
        
//SaveRSAKey(ks.str(), key, true);
        ConvertToArray(fpbtext, pn.str(), key, false);
        ConvertToArray(fprtext, kn.str(), key, 
true);
        RSA_free(key); 
    }
}

rsa加密和解密


        unsigned char* prk = &prk0[0];
        key 
= d2i_RSAPrivateKey(NULL, (const unsigned char**)&prk, sizeof(prk0));
        
//key = RSA_generate_key(512, RSA_F4, NULL, NULL);
        plen = sizeof(ptext_ex) - 1
        num 
= RSA_private_encrypt(plen, ptext_ex, ctext, key, 
            RSA_PKCS1_PADDING); 
        
if (num != RSA_size(key))   //模数长度  
        { 
            printf(
"%d PKCS#1 v1.5 encryption failed:%s!\n", RSA_size(key), ERR_reason_error_string(ERR_get_error())); 
            err
=1
            
goto next; 
        } 
        
//加密后的数据  
        printf("encrypted text: \n"); 
        
for (i = 0; i < num; i++
        { 
            printf(
"\\x%02x", ctext[i]); 
        } 
        printf(
"\n"); 
        printf(
"RSA_private_encrypt num: %d\n", num); 
        RSA_free(key); 
        unsigned 
char* pbk = &pbk0[0];
        key 
= d2i_RSAPublicKey(NULL, (const unsigned char**)&pbk, sizeof(pbk0));
        num 
= RSA_public_decrypt(num, ctext, ptext, key, 
            RSA_PKCS1_PADDING); 
        
if (num != plen || memcmp(ptext, ptext_ex, num) != 0
        { 
            printf(
"PKCS#1 v1.5 decryption failed!\n"); 
            err
=1
        } 
        
else 
            printf(
"PKCS #1 v1.5 encryption/decryption ok\n"); 
        printf(
"RSA_public_decrypt num: %d\n", num); 
        ptext[num] 
= '\0';    //字符串结尾 
        printf("ptext: %s\n", ptext); 
        RSA_free(key);

 

posted @ 2011-12-26 14:46 muroachanf 阅读(883) | 评论 (0)编辑 收藏

2011年4月20日 #

这什么博客,firefox支持这么差劲

今儿突然想在cppblog发篇文章,
在firefox下写了半天,一提交说内容为空,再一回首,什么都成了虚无,什么意思嘛,郁闷。

posted @ 2011-04-20 00:23 muroachanf 阅读(167) | 评论 (0)编辑 收藏

仅列出标题