2016-04-07 22 views
1

有一個ColdFusion alternaitive這個PHP函數:openssl_verify有沒有ColdFusion的替代PHP函數openssl_verify()?

openssl_verify()驗證簽名是使用與pub_key_id相關的公共密鑰 指定的數據是正確的。此 必須是與用於 簽名的私鑰對應的公鑰。

我已經看遍了所有,但似乎沒有任何。在此先感謝您的任何信息?

+0

我不認爲有一個本地CF功能,但有人可能已經提交了udf到http://cflib.org/。 –

+0

歡迎提供反饋,我會檢查出來。 –

回答

2

有沒有內置函數,AFAIK。但是,java支持signature verification,您可以使用一些java代碼進行修改。

  1. 將要驗證的數據轉換爲二進制。具體步驟取決於您要驗證什麼,但說這是一個物理文件:

    dataBytes = fileReadBinary("c:\path\someFile.zip"); 
    
  2. 解碼簽名值轉換成二進制。再次,「如何」取決於簽名格式。如果它是一個base64編碼字符串:

    signatureBytes = binaryDecode(base64SignatureString, "base64"); 
    
  3. 負荷密鑰庫證書(或文件),並提取公共密匙:

    // Example: "C:\ColdFusion\jre\lib\security\cacerts" 
    fis = createObject("java", "java.io.FileInputStream").init(pathToKeyStore); 
    keyStore = createObject("java", "java.security.KeyStore").getInstance("JKS"); 
    // Default keystore password is "changeit" (do not keep the default. change it) 
    keyStore.load(fis, keyStorePassword.toCharArray()); 
    publicKey = keyStore.getCertificate("yourCertAlias").getPublicKey(); 
    
  4. 創建Signature對象進行驗證。用適當的算法(即SHA1withRSA,等等),公共密鑰和數據初始化它來驗證:

    sign = createObject("java", "java.security.Signature").getInstance("SHA1withRSA"); 
    sign.initVerify(publicKey); 
    sign.update(dataBytes); 
    
  5. 最後,飼料中的簽名和驗證其狀態:

    isVerified = sign.verify(signatureBytes); 
    writeDump(isVerified); 
    

有關更多詳細信息,請參閱Lesson: Generating and Verifying SignaturesWeaknesses and Alternatives