Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Duplicate Java Secure Token CreationDemonstrates how to duplicate some Java code that creates an RSA signature to create a base64 token.
IncludeFile "CkCert.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkRsa.pb" IncludeFile "CkDateTime.pb" Procedure ChilkatExample() ; This requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; This example duplicates the following Java code: ; public X509Certificate2 cert = new X509Certificate2(@"Some path to p12/p12file_name.p12","Password_for_p12"); ; ; public string GenerateSignToken(double timeValidityMin){ ; string equalsSign = ":="; ; string timeCreated = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz"); ; string tokenTimeInfo = "validityTimeMinutes" + equalsSign + timeValidityMin + ";"+"timeCreated" + equalsSign + timeCreated; ; string signature = SignData(tokenTimeInfo); ; string secureToken = tokenTimeInfo + ";" + "signature" + equalsSign + signature; ; return Base64UrlEncode(secureToken); ; } ; ; public string SignData(string stringToSign){ ; byte[] dataToSign = Encoding.UTF8.GetBytes(stringToSign); ; RSACryptoServiceProvider privKey = (RSACryptoServiceProvider)cert.PrivateKey; ; CspKeyContainerInfo containerInfo = new RSACryptoServiceProvider().CspKeyContainerInfo; ; CspParameters cspparams = new CspParameters(containerInfo.ProviderType, containerInfo.ProviderName, privKey.CspKeyContainerInfo.KeyContainerName); ; privKey = new RSACryptoServiceProvider(cspparams); ; string id = CryptoConfig.MapNameToOID("SHA256"); ; byte[] sign = privKey.SignData(dataToSign, id); ; bool res = privKey.VerifyData(dataToSign, id, sign); ; return Convert.ToBase64String(sign).Replace('+', '-').Replace('/', '_').Replace("=", ""); ; } ; ; private static string Base64UrlEncode(string input){ ; var inputBytes = Encoding.UTF8.GetBytes(input); ; return Convert.ToBase64String(inputBytes).Replace('+', '-').Replace('/', '_').Replace("=", ""); ; } success.i dt.i = CkDateTime::ckCreate() If dt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkDateTime::ckSetFromCurrentSystemTime(dt) timeCreated.s = CkDateTime::ckGetAsTimestamp(dt,1) ; Such as 2019-04-01T19:35:44-05:00 Debug timeCreated sbToken.i = CkStringBuilder::ckCreate() If sbToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkStringBuilder::ckAppend(sbToken,"validityTimeMinutes:=10.0;timeCreated:=") CkStringBuilder::ckAppend(sbToken,timeCreated) cert.i = CkCert::ckCreate() If cert.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkCert::ckLoadPfxFile(cert,"Some path to p12/p12file_name.p12","Password_for_p12") If success <> 1 Debug CkCert::ckLastErrorText(cert) CkDateTime::ckDispose(dt) CkStringBuilder::ckDispose(sbToken) CkCert::ckDispose(cert) ProcedureReturn EndIf rsa.i = CkRsa::ckCreate() If rsa.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkRsa::ckSetX509Cert(rsa,cert,1) If success <> 1 Debug CkRsa::ckLastErrorText(rsa) CkDateTime::ckDispose(dt) CkStringBuilder::ckDispose(sbToken) CkCert::ckDispose(cert) CkRsa::ckDispose(rsa) ProcedureReturn EndIf CkRsa::setCkEncodingMode(rsa, "base64url") signature.s = CkRsa::ckSignStringENC(rsa,CkStringBuilder::ckGetAsString(sbToken),"sha256") If CkRsa::ckLastMethodSuccess(rsa) = 0 Debug CkRsa::ckLastErrorText(rsa) CkDateTime::ckDispose(dt) CkStringBuilder::ckDispose(sbToken) CkCert::ckDispose(cert) CkRsa::ckDispose(rsa) ProcedureReturn EndIf CkStringBuilder::ckAppend(sbToken,";signature:=") CkStringBuilder::ckAppend(sbToken,signature) ; Base64URL encode the result CkStringBuilder::ckEncode(sbToken,"base64url","utf-8") token.s = CkStringBuilder::ckGetAsString(sbToken) Debug token CkDateTime::ckDispose(dt) CkStringBuilder::ckDispose(sbToken) CkCert::ckDispose(cert) CkRsa::ckDispose(rsa) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.