加密字符串Roku BrightScript

时间:2017-07-05 09:18:15

标签: roku brightscript

我是BrightScript的新手,

我想知道如何加密字符串。 你能举个例子吗?

这是我的代码

  esn = m.constants.deviceSerialID

如何加密这个结果?

我接受了研究,但我不知道如何使用以及如何使用代码



https://sdkdocs.roku.com/display/sdkdoc/ifEVPCipher




1 个答案:

答案 0 :(得分:0)

使用静态IV(初始化向量)的简单方法:

esn = m.constants.deviceSerialID

Function encrypt(args as Object) as String
    iv = "f6a42a2960d374b82d7b333814cbaf8c"
    cipher = CreateObject("roEVPCipher")
    cipher.setup(true, "aes-256-cbc", args.key, iv, 1)

    ba = CreateObject("roByteArray")
    ba.FromAsciiString(args.data)
    result = cipher.process(ba)

    return result.ToBase64String()
End Function


encryptedString = encrypt({
    key: "<symmetrical-secret-key>"
    data: esn
})

IV只是一个随机的十六进制字符串。在此示例中,您将需要具有相同的IV和密钥来解密消息。 这里的问题是静态IV意味着我们不如我们所能拥有的安全。为了使此操作更安全,您可以将IV设为非静态。

esn = m.constants.deviceSerialID

Function generateHexString(length As Integer) As String
    hexChars = "0123456789abcdef"
    hexString = ""

    For i = 1 to length
        hexString = hexString + hexChars.Mid(Rnd(length / 2) - 1, 1)
    End for

    Return hexString
End Function

Function encrypt(args as Object) as String
    iv = generateHexString(32)
    cipher = CreateObject("roEVPCipher")
    cipher.setup(true, "aes-256-cbc", args.key, iv, 1)

    ba = CreateObject("roByteArray")
    ba.FromAsciiString(args.data)
    result = cipher.process(ba)

    ' Append the IV to the front of the message
    return iv + result.ToBase64String()
End Function


encryptedString = encrypt({
    key: "<symmetrical-secret-key>"
    data: esn
})

现在,每次加密时IV都会更改,更加安全。当您解密消息时,您知道IV是前32个字符,因此您将其删除并将其用作IV解密。

相关问题