medimage 发表于 2015-12-4 21:11:01

DCMTK简介九-dcmsign程序库

本帖最后由 medimage 于 2015-12-4 21:28 编辑

九、dcmsign程序库
dcmsign是一个数字签名库和可用工具。这个模块包含了一些类,以创建DICOM数据集中的数字签名,并验证和删除签名。这个模块需要扩展的OpenSSL库的支持。
主要接口:
--DcmSignature: this class provides the main interface to the dcmsign module - it allows to create, examine and verify digital signatures in DICOM datasets or items. The methods in this class do not handle digital signatures embedded in sequence items within the dataset, other than providing helper functions that allow to locate and attach the sub-items separately. 在dcsignat.h中定义。--SiSecurityProfile: 所有安全框架的抽象基类。abstract base class for all security profiles. 在sisprof.h文件中定义。--SiCertificate: a class representing X.509 public key certificates. 在sicert.h文件中定义。
--SiPrivateKey: a class representing a private key. 在siprivat.h文件中定义。--SiMAC: a base class for all classes that implement hash functions. 在simac.h文件中定义。
工具:dcmsign: Sign and Verify DICOM Files
举例:--验证一个DICOM文件中的所有签名。DcmFileFormat fileformat;if (fileformat.loadFile("test.dcm").good()){int counter = 0;          // counts the signatures in the DICOM fileint corrupt_counter = 0; // counts signatures that failed verificationDcmDataset *dataset = fileformat.getDataset();DcmStack stack;         // stores current location within fileDcmSignature signer;      // signature handlerDcmItem *sigItem = DcmSignature::findFirstSignatureItem(*dataset, stack);while (sigItem) // browse through items that contain digital signatures{    signer.attach(sigItem); // each item may contain multiple signatures    for (unsigned long l=0; l < signer.numberOfSignatures(); ++l)    {      if (signer.selectSignature(l).good())      {      ++counter;
      if (signer.verifyCurrent().bad()) // verify signature
         corrupt_counter++;
      }
    }
    signer.detach();
    sigItem = DcmSignature::findNextSignatureItem(*dataset, stack);
}
if (counter == 0)
      cerr << "no signatures found in dataset." << endl;
else
      cerr << counter << " signatures verified in dataset, "
         << corrupt_counter << " corrupted." << endl;
}
--给一个DICOM文件增加签名。
DcmFileFormat fileformat;
if (fileformat.loadFile("test.dcm").good()){
DcmDataset *dataset = fileformat.getDataset();
SiCreatorProfile profile; // select the "RSA Creator Profile"
SiRIPEMD160 mac;         // use RIPEMD160 as MAC algorithm
DcmSignature signer;       // signature handler
SiCertificate cert;      // our certificate
if (cert.loadCertificate("certificate.pem", X509_FILETYPE_PEM).bad())
{
    cerr << "unable to load certificate" << endl;
    return;
}
SiPrivateKey key; // private key, must be unencrypted here
if (key.loadPrivateKey("privkey.pem", X509_FILETYPE_PEM).bad())
{
    cerr << "unable to load private key" << endl;
    return;
}
signer.attach(dataset); // connect handler to data set
if (signer.createSignature(key, cert, mac, profile).good())
{
    fileformat.saveFile("test_signed.dcm"); // write back
}
}


medimagedev 发表于 2016-5-13 19:52:52

一直在寻找这个,多谢了

medtech 发表于 2016-5-19 15:03:47

谢谢LZ

mri 发表于 2016-5-20 10:39:19

dddddddddddddddddddddddddddd

13636600006 发表于 2016-5-22 14:41:11

顶贴

ultrasound 发表于 2016-5-24 05:53:10

LZ高人啊,我来学习了

13636600141 发表于 2016-5-24 17:03:19

厉害
页: [1]
查看完整版本: DCMTK简介九-dcmsign程序库