Sub VerifyRSASignature(Data As String, SignatureBase64 As String, PublicKeyPEM As String) As Boolean
Dim su As StringUtils
' Decode signature
Dim sigBytes() As Byte = su.DecodeBase64(SignatureBase64)
Dim dataBytes() As Byte = Data.GetBytes("UTF8")
' Clean PEM
PublicKeyPEM = PublicKeyPEM.Replace("-----BEGIN PUBLIC KEY-----", "")
PublicKeyPEM = PublicKeyPEM.Replace("-----END PUBLIC KEY-----", "")
PublicKeyPEM = PublicKeyPEM.Replace(Chr(10), "")
PublicKeyPEM = PublicKeyPEM.Replace(Chr(13), "")
Dim keyBytes() As Byte = su.DecodeBase64(PublicKeyPEM)
' Create X509EncodedKeySpec using constructor
Dim joKeySpec As JavaObject
joKeySpec.InitializeNewInstance("java.security.spec.X509EncodedKeySpec", Array(keyBytes))
' Create RSA public key
Dim joKeyFactory As JavaObject
joKeyFactory = joKeyFactory.InitializeStatic("java.security.KeyFactory").RunMethod("getInstance", Array("RSA"))
Dim pubKey As JavaObject = joKeyFactory.RunMethod("generatePublic", Array(joKeySpec))
' Verify signature
Dim joSig As JavaObject
joSig = joSig.InitializeStatic("java.security.Signature").RunMethod("getInstance", Array("SHA256withRSA"))
joSig.RunMethod("initVerify", Array(pubKey))
joSig.RunMethod("update", Array(dataBytes))
Return joSig.RunMethod("verify", Array(sigBytes))
End Sub