RSA 签名相关

php demo:

参考:

https://gist.github.com/winok/6153500

<?php 

## openssl genrsa -out key.pem 1024
## openssl rsa -in key.pem -pubout -outform PEM -out pubkey.pem
## openssl rsa -in key.pem -pubout -outform DER -out pubkey.der

function hextobin($hexstr) 
{ 
	$n = strlen($hexstr); 
	$sbin="";   
	$i=0; 
	while($i<$n) 
	{       
		$a =substr($hexstr,$i,2);           
		$c = pack("H*",$a); 
		if ($i==0){$sbin=$c;} 
		else {$sbin.=$c;} 
		$i+=2; 
	} 
	return $sbin; 
} 

function buildSign($toSign) {

	$signature = null;
	$priv_key = file_get_contents('key.pem');

	$pkeyid = openssl_get_privatekey($priv_key);
	openssl_sign($toSign, $signature, $pkeyid);
	openssl_free_key($pkeyid);

	$hex = bin2hex( $signature );
	return $hex;
}

function verifySign($sign, $toSign) {

	$signdata = hextobin($sign);

	$ret = openssl_verify($toSign, $signdata, file_get_contents('pubkey.pem'));
	return $ret;	
}

function verifySign_der($sign, $toSign) {

	$signdata = hextobin($sign);

	$der = file_get_contents('pubkey.der');
	$pem = "-----BEGIN PUBLIC KEY-----n";
	$str = base64_encode($der);
	$pem .= wordwrap($str, 64, "n", true)."n";	
	$pem .= "-----END PUBLIC KEY-----n";	

	$ret = openssl_verify($toSign, $signdata, $pem);
	return $ret;	
}

$sign = buildSign('test1');
if (verifySign($sign, 'test1') == 1)
	echo "successn";
if (verifySign_der($sign, 'test1') == 1)
	echo "successn";

echo "n";

$sign = buildSign('test1');
if (verifySign($sign, 'test2') == 0)
	echo "successn";
if (verifySign_der($sign, 'test2') == 0)
	echo "successn";

?>

 

相关格式参考:

http://www.cnblogs.com/xiaoweiyu/archive/2011/12/26/2302297.html

 

注意:

1.相关参数(如:openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -out key.der -nocrypt 里的最后一个参数 )

2.公钥和私钥所用命令不同

3.通常二进制der格式通过 base64 或十六进制表示。先还原,再转换格式。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

CURL 文件上传兼容 php5.4-5.5

	public function getCurlValue($filename, $contentType) {
		// PHP 5.5 introduced a CurlFile object that deprecates the old
		// @filename syntax
		// See: https://wiki.php.net/rfc/curl-file-upload
		if (function_exists ( 'curl_file_create' )) {
			$filename = preg_replace ( '/^@/', '', $filename );
			return new CurlFile ( $filename, $contentType, basename($filename) );
			// curl_file_create ( $filename, $contentType, basename($filename));
		}
		// Use the old style if using an older version of PHP
		if (! preg_match ( '/^@/', $filename ))
			$value = "@" . $filename;
		else
			$value = $filename;
		return $value;
	}

 

curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); // POST提交的数据包

 

if ($data) {
			foreach ( $data as $key => $file ) {
				$data [$key] = $this->getCurlValue ( $file, $this->get_mime ( $file ) );
			}
		}

 

	function get_mime($file) {
		$ext = pathinfo ( $file, PATHINFO_EXTENSION );
		if ($ext == '')
			return '';
		$mime_types = include 'mime.class.php';
		return isset ( $mime_types [$ext] ) ? $mime_types [$ext] : '';
	}

 

<?php
/**
 * MIME types.
 *
 * This file contains most commonly used MIME types
 * according to file extension names.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright Copyright &copy; 2008-2011 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 * @version $Id: mimeTypes.php 3181 2011-04-15 01:26:52Z alexander.makarow $
 */

return array(
	'ai'=>'application/postscript',
	'aif'=>'audio/x-aiff',
	'aifc'=>'audio/x-aiff',
	'aiff'=>'audio/x-aiff',
	'asc'=>'text/plain',
	'au'=>'audio/basic',
	'avi'=>'video/x-msvideo',
	'bcpio'=>'application/x-bcpio',
	'bin'=>'application/octet-stream',
	'bmp'=>'image/bmp',
	'c'=>'text/plain',
	'cc'=>'text/plain',
	'ccad'=>'application/clariscad',
	'cdf'=>'application/x-netcdf',
	'class'=>'application/octet-stream',
	'cpio'=>'application/x-cpio',
	'cpt'=>'application/mac-compactpro',
	'csh'=>'application/x-csh',
	'css'=>'text/css',
	'dcr'=>'application/x-director',
	'dir'=>'application/x-director',
	'dms'=>'application/octet-stream',
	'doc'=>'application/msword',
	'docx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
	'xlsx'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
	'pptx'=>'application/vnd.openxmlformats-officedocument.presentationml.presentation',
	'dotx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
	'drw'=>'application/drafting',
	'dvi'=>'application/x-dvi',
	'dwg'=>'application/acad',
	'dxf'=>'application/dxf',
	'dxr'=>'application/x-director',
	'eps'=>'application/postscript',
	'etx'=>'text/x-setext',
	'exe'=>'application/octet-stream',
	'ez'=>'application/andrew-inset',
	'f'=>'text/plain',
	'f90'=>'text/plain',
	'fli'=>'video/x-fli',
	'flv'=>'video/x-flv',
	'gif'=>'image/gif',
	'gtar'=>'application/x-gtar',
	'gz'=>'application/x-gzip',
	'h'=>'text/plain',
	'hdf'=>'application/x-hdf',
	'hh'=>'text/plain',
	'hqx'=>'application/mac-binhex40',
	'htm'=>'text/html',
	'html'=>'text/html',
	'ice'=>'x-conference/x-cooltalk',
	'ief'=>'image/ief',
	'iges'=>'model/iges',
	'igs'=>'model/iges',
	'ips'=>'application/x-ipscript',
	'ipx'=>'application/x-ipix',
	'jpe'=>'image/jpeg',
	'jpeg'=>'image/jpeg',
	'jpg'=>'image/jpeg',
	'js'=>'application/x-javascript',
	'kar'=>'audio/midi',
	'latex'=>'application/x-latex',
	'lha'=>'application/octet-stream',
	'lsp'=>'application/x-lisp',
	'lzh'=>'application/octet-stream',
	'm'=>'text/plain',
	'man'=>'application/x-troff-man',
	'me'=>'application/x-troff-me',
	'mesh'=>'model/mesh',
	'mid'=>'audio/midi',
	'midi'=>'audio/midi',
	'mif'=>'application/vnd.mif',
	'mime'=>'www/mime',
	'mov'=>'video/quicktime',
	'movie'=>'video/x-sgi-movie',
	'mp2'=>'audio/mpeg',
	'mp3'=>'audio/mpeg',
	'mpe'=>'video/mpeg',
	'mpeg'=>'video/mpeg',
	'mpg'=>'video/mpeg',
	'mpga'=>'audio/mpeg',
	'ms'=>'application/x-troff-ms',
	'msh'=>'model/mesh',
	'nc'=>'application/x-netcdf',
	'oda'=>'application/oda',
	'pbm'=>'image/x-portable-bitmap',
	'pdb'=>'chemical/x-pdb',
	'pdf'=>'application/pdf',
	'pgm'=>'image/x-portable-graymap',
	'pgn'=>'application/x-chess-pgn',
	'png'=>'image/png',
	'pnm'=>'image/x-portable-anymap',
	'pot'=>'application/mspowerpoint',
	'ppm'=>'image/x-portable-pixmap',
	'pps'=>'application/mspowerpoint',
	'ppt'=>'application/mspowerpoint',
	'ppz'=>'application/mspowerpoint',
	'pre'=>'application/x-freelance',
	'prt'=>'application/pro_eng',
	'ps'=>'application/postscript',
	'qt'=>'video/quicktime',
	'ra'=>'audio/x-realaudio',
	'ram'=>'audio/x-pn-realaudio',
	'ras'=>'image/cmu-raster',
	'rgb'=>'image/x-rgb',
	'rm'=>'audio/x-pn-realaudio',
	'roff'=>'application/x-troff',
	'rpm'=>'audio/x-pn-realaudio-plugin',
	'rtf'=>'text/rtf',
	'rtx'=>'text/richtext',
	'scm'=>'application/x-lotusscreencam',
	'set'=>'application/set',
	'sgm'=>'text/sgml',
	'sgml'=>'text/sgml',
	'sh'=>'application/x-sh',
	'shar'=>'application/x-shar',
	'silo'=>'model/mesh',
	'sit'=>'application/x-stuffit',
	'skd'=>'application/x-koan',
	'skm'=>'application/x-koan',
	'skp'=>'application/x-koan',
	'skt'=>'application/x-koan',
	'smi'=>'application/smil',
	'smil'=>'application/smil',
	'snd'=>'audio/basic',
	'sol'=>'application/solids',
	'spl'=>'application/x-futuresplash',
	'src'=>'application/x-wais-source',
	'step'=>'application/STEP',
	'stl'=>'application/SLA',
	'stp'=>'application/STEP',
	'sv4cpio'=>'application/x-sv4cpio',
	'sv4crc'=>'application/x-sv4crc',
	'swf'=>'application/x-shockwave-flash',
	't'=>'application/x-troff',
	'tar'=>'application/x-tar',
	'tcl'=>'application/x-tcl',
	'tex'=>'application/x-tex',
	'texi'=>'application/x-texinfo',
	'texinfo'=>'application/x-texinfo',
	'tif'=>'image/tiff',
	'tiff'=>'image/tiff',
	'tr'=>'application/x-troff',
	'tsi'=>'audio/TSP-audio',
	'tsp'=>'application/dsptype',
	'tsv'=>'text/tab-separated-values',
	'txt'=>'text/plain',
	'unv'=>'application/i-deas',
	'ustar'=>'application/x-ustar',
	'vcd'=>'application/x-cdlink',
	'vda'=>'application/vda',
	'viv'=>'video/vnd.vivo',
	'vivo'=>'video/vnd.vivo',
	'vrml'=>'model/vrml',
	'wav'=>'audio/x-wav',
	'wrl'=>'model/vrml',
	'xbm'=>'image/x-xbitmap',
	'xlc'=>'application/vnd.ms-excel',
	'xll'=>'application/vnd.ms-excel',
	'xlm'=>'application/vnd.ms-excel',
	'xls'=>'application/vnd.ms-excel',
	'xlw'=>'application/vnd.ms-excel',
	'xml'=>'application/xml',
	'xpm'=>'image/x-xpixmap',
	'xwd'=>'image/x-xwindowdump',
	'xyz'=>'chemical/x-pdb',
	'zip'=>'application/zip',
);

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

phpexcel 生成Excel5 不标准问题处理方法

支付宝批量付款的excel5 文件格式不支持兼容模式文件。

需要标准excel 5 文件。

phpexcel 生成文件不规范,无法识别。

尝试过的解决方式:

html,xml,class.writeexcel ,phpexcel 老版本 等均无法识别。

通过打印属性。做相关修改和调整,还是失败 biff之类的调整。涉及的文件编码和处理方式太细,不了解的人无法做完全调整。

解决方式。

使用phpexcel生成 xlsx文档。使用 openoffice进行文档转换,转成xls格式。测试成功。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

支付宝实现付款给多用户解决方案

一:设置申请,由客对每个单进行单独的支付平台打款

优点:可以记录在自身平台

缺点:客服妹子操作繁琐

 

二:批量付款到支付宝账户

参考:

https://b.alipay.com/order/productDetail.htm?productId=2011052500326597&tabId=1#ps-tabinfo-hash

优点:相对便捷

缺点:中间excel程序不可保证,且最大金额为25,可考虑切分。需要严谨的流程处理保障。

 

三:即时到帐分润处理

参考:

https://b.alipay.com/order/productDetail.htm?productId=2012111200373124

附加分润参数详解:

http://help.alipay.com/support/help_detail.htm?help_id=243087

royalty_type = “10”
royalty_parameters = “111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二

优点:相对便捷,程序可记录

缺点:最大处理数为10条,需要严谨的程序处理保障。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

chrome 扩展

参考

http://www.cnblogs.com/walkingp/archive/2011/03/31/2001628.html

示例:

https://chrome.google.com/webstore/detail/auto-refresh-page/edbmfligbmlgmfbbhoamolndhjffanka?hl=zh-CN

示例下载:

http://chrome-extension-downloader.com/

解压为zip

脚本干涉

http://jingyan.baidu.com/article/215817f73ebe901eda142320.html

官网:

http://developer.chrome.com/extensions/tabs.html#method-executeScript

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

JAVA AXIS 1.4 客户端 转 PHP SOAP

注:主要为转换的过程中,java正常,但是soap不正常提供的便捷解决方案。其它语言均适用.

axis参考

http://www.ibm.com/developerworks/cn/webservices/lp/axis/

主要生成这块说下。其实网上写的一堆生成什么bat的可以直接无视。

下载 axis 2.x上版本,有bin 目录,将 wsdl2java.bat的前部分复制,进行简单修改即可。

然后贴目标wsdl进行生成.

绑定部分自己写函数处理。一般两种,在soapheader 里补充auth。

或者用axis的原绑定。不过还是header加标签比较容易处理。

生成好之后,调用成功,开始下一步。

soap是简单对象访问协议,所以。在调用正常的前提下,这边只要知道具体的报文是什么,异样配葫芦就可以了。

使用 wireshark 进行数据抓包,获取提交的报文。

下载:http://www.wireshark.org/download.html%E2%80%8E

参考:http://www.cnblogs.com/tankxiao/archive/2012/10/10/2711777.html

无线路由解决方案:http://vsean.net/blog/post/62

根据提交的报文,配置php的soap 客户端就ok啦。

还有,如果有特殊的报文(总有那么些人,非用soap,又搞脑残的特殊呵呵。)

通过直接继承soap,重写doRequest进行数据的修改或特殊处理。方正能达到目标即可。

附:soap的session保持过程为new一个,使用同一个即可。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827