存档

文章标签 ‘openssl’

openssl使用DSA算法生成签名

2013年12月27日 评论已被关闭

命令:
openssl> dgst -dss1 -sign C.pri -out signature.bin s.txt

解释
C.pri是DSA算法生成的私钥文件
s.txt是制作签名的原文
signature.bin是生成的签名文件

php中可以使用下面的方法察看签名内容
<?php
echo bin2hex(file_get_contents('signature.bin'));
?>

参考内容
消息摘要算法
支持的算法包括:MD2, MD4, MD5, MDC2, SHA1(有时候叫做DSS1), RIPEMD-160。SHA1和RIPEMD-160产生160位哈西值,其他的产生128位。除非出于兼容性考虑,否则推荐使用SHA1或者RIPEMD-160。
除了RIPEMD-160需要用rmd160命令外,其他的算法都可用dgst命令来执行。
OpenSSL对于SHA1的处理有点奇怪,有时候必须把它称作DSS1来引用。
消息摘要算法除了可计算哈西值,还可用于签名和验证签名。签名的时候,对于DSA生成的私匙必须要和DSS1(即SHA1)搭配。而对于RSA生成的私匙,任何消息摘要算法都可使用。

# 消息摘要算法应用例子
# 用SHA1算法计算文件file.txt的哈西值,输出到stdout
$ openssl dgst -sha1 file.txt
# 用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt
$ openssl sha1 -out digest.txt file.txt
# 用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin
# 签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中
$ openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt
# 用dss1算法验证file.txt的数字签名dsasign.bin,
# 验证的private key为DSA算法产生的文件dsakey.pem
$ openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt
# 用sha1算法为文件file.txt签名,输出到文件rsasign.bin
# 签名的private key为RSA算法产生的文件rsaprivate.pem
$ openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt
# 用sha1算法验证file.txt的数字签名rsasign.bin,
# 验证的public key为RSA算法生成的rsapublic.pem
$ openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

参考连接
http://www.openssl.org/docs/apps/dgst.html
http://blog.csdn.net/zhangyang0402/article/details/4071196
http://linux.chinaunix.net/techdoc/beginner/2009/06/29/1120721.shtml

分类: php 标签:

php 使用openssl_verify验证签名

2013年12月26日 评论已被关闭
<?php
/**
 * 验证签名
 * TobeVerified 待验证签名的密文
 * PlainText 待验证签名的明文
 * CertFile 签名者公钥证书
 * return 验证成功返回true,失败返回false(从LastErrMsg属性获取失败原因)
 */
function VerifyMsg($TobeVerified, $PlainText, $CertFile,$signature_alg=OPENSSL_ALGO_SHA1)
{
    
    //用公钥验签
    $fp=fopen($CertFile,"r");
    if(!$fp)
    {
        //echo "Error Number:-10005, Error Description: ER_FIND_CERT_FAILED(找不到证书)";
        return false;
    }
    $pub_key=fread($fp,8192);
    fclose($fp);
    $res = openssl_get_publickey($pub_key);
    if (1==openssl_verify($PlainText,pack("H" . strlen($TobeVerified), $TobeVerified) , $res,$signature_alg))
    {
        //print("验证成功"." <br>");
        return true;
    }
    else
    {
        //echo "Error Number:-10021, Error Description: ER_VERIFY_ERROR(验签失败)|".openssl_error_string();
        return false;
    }
    
}

?>

openssl_verify 可能有三个返回值1,0,-1,只有返回1表示验证签名成功。

$signature_alg 默认OPENSSL_ALGO_SHA1 ,如果是DSA加密要设置成OPENSSL_ALGO_DSS1

分类: php 标签:

php 使用openssl生成签名

2013年12月25日 评论已被关闭
<?php
    /**
     * 根据原文生成签名内容
     *
     * @param string $data 原文内容
     *
     * @return string
     */
    function sign($strData)
    {
        $filePath = 'test.pfx';
        if(!file_exists($filePath)) {
            return false;
        }
 
        $pkcs12 = file_get_contents($filePath);
        if (openssl_pkcs12_read($pkcs12, $certs, '')) {
            $privateKey = $certs['pkey'];
            $publicKey = $certs['cert'];
            $signedMsg = "";
            if (openssl_sign($strData, $signedMsg, $privateKey)) {
        $signedMsg=bin2hex($signedMsg);
                return $signedMsg;
            } else {
                return '';
            }
        } else {
            return '0';
        }
    }
    /*
    
    openssl_pkcs12_read 可以读取pfx格式的私钥,而不需要非要转成pem格式的文件
    */
?> 

  

openssl_sign 默认signature_alg参数是OPENSSL_ALGO_SHA1
如果使用DSA加密方式需要使用OPENSSL_ALGO_DSS1参数
signature_alg 其他参数

OPENSSL_ALGO_DSS1 (integer)
OPENSSL_ALGO_SHA1 (integer)
OPENSSL_ALGO_SHA224 (integer)
OPENSSL_ALGO_SHA256 (integer)
OPENSSL_ALGO_SHA384 (integer)
OPENSSL_ALGO_SHA512 (integer)
OPENSSL_ALGO_RMD160 (integer)
OPENSSL_ALGO_MD5 (integer)
OPENSSL_ALGO_MD4 (integer)
OPENSSL_ALGO_MD2 (integer)

分类: php 标签:


标签

ajax apache array array_slice CentOS checkbox composer cookie csv curl date DATE_FORMAT excel FCKEditor file_get_contents laravel Magento Certified Developer mb_substr memcache Memcached MySQL String Functions Netbeans openssl php面试题 preg_match_all preg_replace QQ登录 rewrite SaeStorage serialize session setTimeout Sphinx spl Storage strtotime ueditor vsftp vsftpd Zend zip 分割字符串 图片处理 新浪云 正则表达式

存档