"smartview" API를 통해 삼성 TV를 제어할 수 있는 go 프로그램(https://github.com/mckael/samtv)을 node.js로 포팅하려고 합니다
프로그램에 "aes 암호화" 기능이 있는데 노드로 포팅하는데 문제가 있습니다.
으아아아지금 직면한 문제는 어떤 알고리즘을 사용해야 하는지, node.js 함수에서 "초기 벡터"가 어디에서 오는지 지정해야 하는지 모른다는 것입니다.
으아아아대신 crypto.createcipher(...)
을 사용할 수 있나요? 하지만 더 이상 사용되지 않으며 패딩이 중요한 것처럼 느껴집니다.
저는 암호화에 대해 아무것도 모릅니다. 어떤 조언이라도 환영합니다.
참고: go 함수에서 s.sessionkey
값은 node.jss.sessionkey
与node.js中的session_key = "59e8ca4b09f2a19ab5421cf55d604c7c"
的值相同
go 代码在 ecb 模式下应用 aes 并使用 pkcs#7 填充。 aes 变体隐式源自密钥大小,例如aes-128 用于 16 字节密钥。密文返回为 []byte
aes-128-ecb
。 ecb模式不应用iv,因此必须在createcipheriv()
中指定为null
。使用填充 pkcs#7(默认)。密文可以返回为 buffer
,它最接近 []byte
go의 session_key = "59e8ca4b09f2a19ab5421cf55d604c7c"
값과 동일합니다. ecb 모드의 코드 aes를 적용하고 pkcs#7 패딩을 사용합니다. aes 변형은 키 크기에서 파생된 암시입니다(예: 16바이트 키의 경우 aes-128). 암호문은 []byte
로 반환됩니다.
nodejs 코드에서는 59e8ca4b09f2a19ab5421cf55d604c7c
看起来像一个十六进制编码的密钥,它是十六进制解码的 16 字节大,因此对应于 aes-128。十六进制解码可以在 go 中使用 encoding/hex 包来实现,例如与 hex.decodestring("59e8ca4b09f2a19ab5421cf55d604c7c")
와 같이 aes 변형 및 모드가 명시적으로 지정됩니다.
게시된 키
.ecb 모드에서 aes-128(16바이트 키) 및 pkcs#7 패딩을 사용하는 Nodejs 코드 예:
으아아아
key := []byte("59e8ca4b09f2a19ab5421cf55d604c7c")
和 const session_key = buffer.from("59e8ca4b09f2a19ab5421cf55d604c7c", "utf-8")
nodejs 代码。在 nodejs 代码中,还必须应用 aes-256-ecb
go 코드는 일반 텍스트와 암호문의 동일한 키(16진수 디코딩) 및 base64 인코딩을 사용하여 동일한 결과를 제공합니다.
완전성을 위해 키를 utf-8로 인코딩한 다음 go 코드에서
와 같이 32바이트 키를 생성할 수도 있습니다. 궁극적으로 키 사양은 사용할 인코딩에 대한 정보를 제공해야 합니다. 🎜 🎜ECB 모드는 안전하지 않습니다. 요즘에는 gcm 모드 등을 통해 인증된 암호화를 사용하는 것이 일반적입니다. 🎜위 내용은 AES 암호화 기능을 node.js로 포팅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!