//代码已在vs2010运行过。
//如果代码不能运行,应该是vs配置的问题,可自行上百度搜索相关的解决方法
#include<iostream>
#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#include <windows.h>
#include <stdlib.h>
#include<fstream>
#pragma comment(lib,"Wininet.lib")
#include <vector>
#include<string>
using namespace std;
//long atol(char *s);
void creat_w( char input[64],unsigned long w[80])
{
int i,j;unsigned long temp,temp1;
for(i=0;i<16;i++)
{
j=4*i;
w[i]=((long)input[j])<<24 |((long)input[1+j])<<16|((long)input[2+j])<<8|((long)input[3+j])<<0;
}
for(i=16;i<80;i++)
{
w[i]=w[i-16]^w[i-14]^w[i-8]^w[i-3];
temp=w[i]<<1;
temp1=w[i]>>31;
w[i]=temp|temp1;
}
//return '0';
}
char ms_len(long a,char intput[64])
{
unsigned long temp3,p1; int i,j;
temp3=0;
p1=~(~temp3<<8);
for(i=0;i<4;i++)
{
j=8*i;
intput[63-i]=(char)((a&(p1<<j))>>j);
}
return '0';
}
//字符串插入函数 在字符串string 中查找 source , 找到后再 source之后插入字符串 destination, 找不到则返回 NULL
static char * insert_string (char * string, const char * source, char* destination )
{
char* sk = strstr (string, source);
if (sk == NULL) return NULL;
//char* tmp;
size_t size = strlen(string)+strlen(destination)+1;
char* newstr = (char*)calloc (1, size);
if (newstr == NULL) return NULL;
char* retstr = (char*)calloc (1, size);
if (retstr == NULL)
{
free (newstr);
return NULL;
}
_snprintf(newstr,size-1,"%s",string);
sk = strstr (newstr, source);
int pos = 0;
sk += strlen(source);
memcpy (retstr+pos, newstr, sk - newstr);
pos += sk - newstr;
memcpy (retstr+pos, destination, strlen(destination));
pos += strlen(destination);
memcpy (retstr+pos, sk, strlen(sk));
free (newstr);
return retstr;
}
string input_return(char* s1)
{
ofstream outfile;
outfile.open("myfile.txt");
vector<char> v;
//string text=s1;
//string method="iss.getTalk";
//appKey ukundogckyf5kwbv2wmihaz5425xfc5wtfo4bqyp
//appSecret 08bc1d6efbb937b51e71928fe5f54066
//char szUrl[] = "http://117.121.49.45/service/iss?appkey=5rh55ljf6sijrmp4c23xyoaebccjojs4rekljoqu&appver=1&city=%E5%8C%97%E4%BA%AC%E5%B8%82&gps=39.97685%2C116.36043&history=&method=iss.getTalk&text=%E6%98%8E%E5%A4%A9%E7%9A%84%E5%A4%A9%E6%B0%94%EF%BC%9F&time=2015-03-18%2018%3A03%3A41&udid=54d59edc305273984f990823ee150fd1c25dc289&ver=2.0&voiceId=&scenario=&screen=&dpi=&viewid=0&appsig=E58C5622B7A9C79541E85F0EA71A6E172B812B73";
// char szUrl[]="http://10.10.11.107/6F41015F89599D6C121BE289D6803F698C320354&appkey=ukundogckyf5kwbv2wmihaz5425xfc5wtfo4bqyp&method=iss.getTalk&text=%e4%bb%8a%e5%a4%a9%e5%a4%a9%e6%b0%94%e5%a6%82%e4%bd%95&ver=2.0&appsig=573B5655B56A7B729C704EB7BA19B23DFE906719&6F41015F89599D6C121BE289D6803F698C320354";
//char szUrl[] = "http://117.121.49.45/service/iss?appkey=5rh55ljf6sijrmp4c23xyoaebccjojs4rekljoqu&appver=1&city=%E5%8C%97%E4%BA%AC%E5%B8%82&gps=39.97685%2C116.36043&history=&method=iss.getTalk&text=s1&time=2015-03-18%2018%3A03%3A41&udid=54d59edc305273984f990823ee150fd1c25dc289&ver=2.0&voiceId=&scenario=&screen=&dpi=&viewid=0&appsig=E58C5622B7A9C79541E85F0EA71A6E172B812B73";
// char szUrl[]="http://scv2.hivoice.cn/service/iss?appkey=F99AB60027FF379418DF6A094E83FA03723F92B7&method=iss.getTalk&appkey=test&ver=2.0&udid=124128941928&gps=33.90249,103.234723&appver=1.4.1.800&appsig=test&text=附近有什么好吃的";
// char szUrl[]="http://scv2.hivoice.cn/service/iss?4109A0F4790E67302889FFB6F3DF93AA&appkey=ukundogckyf5kwbv2wmihaz5425xfc5wtfo4bqyp&method=iss.getTalk&text=s1&ver=2.0&ver=2.0&appver=1.0.0&4109A0F4790E67302889FFB6F3DF93AA";
// char szUrl[]="http://scv2.hivoice.cn/service/iss?appkey=F99AB60027FF379418DF6A094E83FA03723F92B7&method=iss.getTalk&text=%e6%9d%a5%e4%b8%80%e9%a6%96%e6%ad%8c&ver=2.0&udid=8E67302889FFB6F3DF&appver=1.0.0&appsig=4109A0F4790E67302889FFB6F3DF93AA";
// char szUrl[]="http://scv2.hivoice.cn/ii.appkey=F99AB60027FF379418DF6A094E83FA03723F92B7&method=iss.getTalk&text=%e6%9d%a5%e4%b8%80%e9%a6%96%e6%ad%8c&ver=2.0&udid=8E67302889FFB6F3DF&appver=1.0.0&appsig=4109A0F4790E67302889FFB6F3DF93AA";
//char szUrl[]="http://scv2.hivoice.cn/service/iss?method=iss.getTalk&appkey=test&ver=2.0&udid=124128941928&gps=33.90249,103.234723&appver=1.4.1.800&appsig=test&text=附近有什么好吃的";
// char szUrl[]="http://scv2.hivoice.cn/service/iss?12794ca4422a63a21c8584bfb067b424&appKey=zjo6pne4fmgpiketi4c7be2dctjso36hjyaoppip&method=iss.getTalk&text=%e6%9d%a5%e4%b8%80%e9%a6%96%e6%ad%8c&ver=2.0&12794ca4422a63a21c8584bfb067b424&appsig=37356BB7900A7A8EF5865A40D4F5C4615876AAC7";
//char suUrl[]="http://scv2.hivoice.cn/service/08bc1d6efbb937b51e71928fe5f54066&appKey=ukundogckyf5kwbv2wmihaz5425xfc5wtfo4bqyp&method=iss.getTalk&text=%e6%9d%a5%e4%b8%80%e9%a6%96%e6%ad%8c&ver=2.0&udid=8E67302889FFB6F3DF&appver=1.0.0&appsig=4109A0F4790E67302889FFB6F3DF93AA&08bc1d6efbb937b51e71928fe5f54066";
//char szUrl[]="http://scv2.hivoice.cn/service/iss?08bc1d6efbb937b51e71928fe5f54066&appkey=zjo6pne4fmgpiketi4c7be2dctjso36hjyaoppip&method=iss.getTalk&text=&ver=2.0&08bc1d6efbb937b51e71928fe5f54066&appsig=FF7F6EAC33094241AEE59A578DA8FB9BAA98FD29";
char szUrl[]="08bc1d6efbb937b51e71928fe5f54066&appkey=zjo6pne4fmgpiketi4c7be2dctjso36hjyaoppip&method=iss.getTalk&text=&ver=2.0&08bc1d6efbb937b51e71928fe5f54066";
//printf("%s\n",insert_string (szUrl,"text=",s1));
//szUrl=insert_string (szUrl,"text=",s1);
//printf("hello\n");
string lan=insert_string (szUrl,"text=",s1); //在text后连接用户输入的数据
string lan2="12794ca4422a63a21c8584bfb067b424&"+lan+"&12794ca4422a63a21c8584bfb067b424&";
//printf("lan=======%s\n",lan);
unsigned long H0=0x67452301,H1=0xefcdab89,H2=0x98badcfe,H3=0x10325476,H4=0xc3d2e1f0;
unsigned long A,B,C,D,E,temp,temp1,temp2,temp3,k,f;int i,flag;unsigned long w[80];
char input[64];
long x;int n;
//printf("input message:\n");
//scanf("%s",input);
n=strlen(input);
if(n<57)
{
x=n*8;
ms_len(x,input);
if(n==56)
for(i=n;i<60;i++)
input[i]=0;
else
{
input[n]=128;
for(i=n+1;i<60;i++)
input[i]=0;
}
}
creat_w(input,w);
/*for(i=0;i<80;i++)
printf("%lx,",w[i]);*/
printf("\n");
A=H0;B=H1;C=H2;D=H3;E=H4;
for(i=0;i<80;i++)
{
flag=i/20;
switch(flag)
{
case 0: k=0x5a827999;f=(B&C)|(~B&D);break;
case 1: k=0x6ed9eba1;f=B^C^D;break;
case 2: k=0x8f1bbcdc;f=(B&C)|(B&D)|(C&D);break;
case 3: k=0xca62c1d6;f=B^C^D;break;
}
/*printf("%lx,%lx\n",k,f); */
temp1=A<<5;
temp2=A>>27;
temp3=temp1|temp2;
temp=temp3+f+E+w[i]+k;
E=D;
D=C;
temp1=B<<30;
temp2=B>>2;
C=temp1|temp2;
B=A;
A=temp;
// printf("%lx,%lx,%lx,%lx,%lx\n",A,B,C,D,E);
}
H0=H0+A;
H1=H1+B;
H2=H2+C;
H3=H3+D;
H4=H4+E;
string lan3=lan2+"appsig=";
//longatol
char a1[1000],a2[1000],a3[1000],a4[1000],a0[1000];
sprintf(a0, "%ld",H0);
sprintf(a1, "%ld",H1);
sprintf(a2, "%ld",H2);
sprintf(a3, "%ld",H3);
sprintf(a4, "%ld",H4);
//string lan3;
//strcpy(lan3,a0);
string zhou0=a0;
string zhou1=a1;
string zhou2=a2;
string zhou3=a3;
string zhou4=a4;
string lan4="http://scv2.hivoice.cn/service/iss?"+lan3+zhou0+zhou1+zhou2+zhou3+zhou4;
cout<<lan4<<endl;
//strcpy(dst,src.c_str());
strcpy(szUrl,lan4.c_str());
cout<<szUrl;
//outfile<<szUrl<<endl;
//char szUrl[]="http://scv2.hivoice.cn/service/iss?12794ca4422a63a21c8584bfb067b424&appKey=zjo6pne4fmgpiketi4c7be2dctjso36hjyaoppip&method=iss.getTalk&text=cout<<s1&ver=2.0&12794ca4422a63a21c8584bfb067b424&appsig=2462F8A6D6F2F34CBE707E98A6FB90AA85842039";
CHAR szAgent[] = "";
HINTERNET hInternet1 =
InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,NULL);
if (NULL == hInternet1)
{
InternetCloseHandle(hInternet1);
return FALSE;
}
HINTERNET hInternet2 =InternetOpenUrl(hInternet1,szUrl,NULL,NULL,INTERNET_FLAG_NO_CACHE_WRITE,NULL);
if (NULL == hInternet2)
{
InternetCloseHandle(hInternet2);
InternetCloseHandle(hInternet1);
return FALSE;
}
DWORD dwMaxDataLength = 500;
PBYTE pBuf = (PBYTE)malloc(dwMaxDataLength*sizeof(TCHAR));
if (NULL == pBuf)
{
InternetCloseHandle(hInternet2);
InternetCloseHandle(hInternet1);
return FALSE;
}
DWORD dwReadDataLength = NULL;
BOOL bRet = TRUE;
do
{
ZeroMemory(pBuf,dwMaxDataLength*sizeof(TCHAR));
bRet = InternetReadFile(hInternet2,pBuf,dwMaxDataLength,&dwReadDataLength);
for (DWORD dw = 0;dw < dwReadDataLength;dw++)
{
v.push_back(pBuf[dw]);
}
} while (NULL != dwReadDataLength);
outfile<<szUrl<<endl;
vector<char>::iterator i_j;
for(i_j=v.begin(); i_j!=v.end(); i_j++)
{
//printf("%c",*i_j);
outfile<<*i_;
}
//Sleep(100000);
outfile<<szUrl<<endl;
outfile.close();
return lan4;
}
int main()
{
char s1[10000];
cin>>s1;
printf("%s\n",input_return(s1));
return 0;
}