鍍金池/ 問答/Linux/ 誰能簡單解釋一下什么是消息簽名?

誰能簡單解釋一下什么是消息簽名?

如題所示,請大俠指教,謝謝!

回答
編輯回答
傲嬌范
  1. 這種問題你應該去查一下百科

  2. 消息簽名簡單來說就是通過摘要算法(MD5SHA系列等),針對消息生成一個摘要,防止消息被篡改或偽造

2018年1月10日 12:36
編輯回答
久舊酒

來來來,一圖解惑簽名和驗證流程,詳細請繼續(xù)訪問鏈接
https://www.codeproject.com/a...

圖片描述

再貼出python代碼看看,可以直接使用的。

#! python
#!-*- coding:utf-8 -*-
# --------------------------------------------------------
# Written by Ren Wei
# --------------------------------------------------------

from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
import base64
import os.path as osp

import argparse


'''*RSA簽名
* data待簽名數(shù)據(jù)
* 簽名用商戶私鑰,必須是沒有經(jīng)過pkcs8轉換的私鑰
* 最后的簽名,需要用base64編碼
* return Sign簽名
'''
def sign(data, priKey=None):
    if priKey is None:
        priKey = open(osp.expanduser('~/.ssh/id_rsa'), 'r').read()
    key = RSA.importKey(priKey)
    h = SHA.new(data)
    signer = PKCS1_v1_5.new(key)
    signature = signer.sign(h)
    return base64.b64encode(signature)

'''*RSA驗簽
* data待簽名數(shù)據(jù)
* signature需要驗簽的簽名
* 驗簽用公鑰
* return 驗簽是否通過 bool值
'''
def verify(data, signature, pubKey=None):
    if pubKey is None:
        pubKey = open(osp.expanduser('~/.ssh/id_rsa.pub'), 'r').read()
    key = RSA.importKey(pubKey)
    h = SHA.new(data)
    verifier = PKCS1_v1_5.new(key)
    if verifier.verify(h, base64.b64decode(signature)):
        return True
    return False


def parse_args():
    """
    Parse input arguments
    """
    parser = argparse.ArgumentParser(description='signfile')
    parser.add_argument('--infile', dest='infile',
                        help='file to be signed or verified.', type=str)
    parser.add_argument('--outfile', dest='outfile',
                        help='Outputing Signature File',
                        default=None, type=str)
    parser.add_argument('--signature', dest='signature',
                        help='Signature File',
                        default=None, type=str)
    parser.add_argument('--prikey', dest='prikeyfile',
                        help='Private Key File',
                        default=None, type=str)
    parser.add_argument('--pubkey', dest='pubkeyfile',
                        help='Public Key File',
                        default=None, type=str)
    args = parser.parse_args()
    return args

if __name__ == '__main__':
    args = parse_args()

    raw_data = open(args.infile, 'rb').read()

    if args.signature is not None:
        pubkey = None
        if args.pubkeyfile is not None:
            pubkey = open(args.pubkeyfile, 'r').read()
        print verify(raw_data,
                     open(args.signature, 'r').read(),
                     pubkey)
    else:
        prikey = None
        if args.prikeyfile is not None:
            prikey = open(args.prikeyfile, 'r').read()
        sign_data = sign(raw_data,prikey)
        if args.outfile is not None:
            with open(args.outfile,'w') as f:
                f.write(sign_data)
        else:
            print sign_data

2017年3月12日 17:32
編輯回答
涼心人

私鑰加密、公鑰解密,既保證消息的完整性,也能解決偽造、篡改、否認等問題

2017年11月28日 04:09