> 백엔드 개발 > Golang > AES 암호화 기능을 node.js로 포팅

AES 암호화 기능을 node.js로 포팅

PHPz
풀어 주다: 2024-02-12 13:57:13
앞으로
593명이 탐색했습니다.

将 AES 加密功能移植到 node.js

질문 내용

"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

Solution

aes-128-ecb。 ecb模式不应用iv,因此必须在createcipheriv()中指定为null。使用填充 pkcs#7(默认)。密文可以返回为 buffer,它最接近 []bytego의 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-ecbgo 코드는 일반 텍스트와 암호문의 동일한 키(16진수 디코딩) 및 base64 인코딩을 사용하여 동일한 결과를 제공합니다.

완전성을 위해 키를 utf-8로 인코딩한 다음 go 코드에서

와 같이 32바이트 키를 생성할 수도 있습니다. 궁극적으로 키 사양은 사용할 인코딩에 대한 정보를 제공해야 합니다. 🎜 🎜ECB 모드는 안전하지 않습니다. 요즘에는 gcm 모드 등을 통해 인증된 암호화를 사용하는 것이 일반적입니다. 🎜

위 내용은 AES 암호화 기능을 node.js로 포팅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿