我是BrightScript的新手,
我想知道如何加密字符串。 你能举个例子吗?
这是我的代码
esn = m.constants.deviceSerialID
如何加密这个结果?
我接受了研究,但我不知道如何使用以及如何使用代码
https://sdkdocs.roku.com/display/sdkdoc/ifEVPCipher

答案 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解密。