问题描述
我正在努力实现加密密码,以使用使用加密密码的Ig.com股票交易API。 crypto/***
软件包中的所有示例似乎都不符合IG.com的要求。
他们的文档指出需要执行以下步骤:
- 调用/ session / encryptionKey,其中提供了密钥和时间戳记
- 使用密钥创建RSA令牌。
- 加密密码+“ |” +时间戳
调用https://demo-api.ig.com/gateway/deal/session/encryptionKey会提供以下类型的响应:(响应的一部分已替换为星号 [*]):
{
"encryptionKey": "**************iG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8GLjXQTT96zXJI0Nvhuw8vpGrtB7x0qErBwCXm15x5xnsiZzKyhWy3tyn6Tpe+Yyiaz+gbqBFUChVQ/Plm7ntKepcI68rUnqW1OKFOTP4oZJnu7bs8l0etqeJwIG87pqsnn6CAkWg6BIMBT7QShQj71HBJ8JXiOcm2plc5wXxlO8dD5TN+a3bytf9OMUxZn9ggzauI4RiU0ElybxoeayTbqSrGQkg/D01G3PuDjQa5yf3I5WHSYS+BpylfupsfurbO/ugCmsGVugV5ST7VLK7TReVWxjg20P+/LSJ1gkoVxHIMzmN0I4jk2N2/667nSzmkCZSb4jTyOjdcOlCgWyw******","timeStamp": 1598268011542
}
我尝试的解决方法如下:
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"fmt"
"strconv"
)
func main() {
encryptionKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8GLjXEYY96zXJI0Nvhuw8vpGrtB7x0qErBwCXm15x5xnsiZzKiuWy3tyn6Tpe+Yyiaz+gbqBFUChVQ/Plm7ntKepcI68rUnqW1OKFOTP4oZJnu7bs8l0etqeJwIG87pqsnn6CAkWg6BIMBT7QShQj71HBJ8JXiOcm2plc5wXxlO8dD5TN+a3bytf9OMUxZn9ggzauI4RiU0ElybxoeayTbqSrGQkg/D01G3PuDjQa5yf3I5WHSYS+BpylfupsfurbO/ugCmsGVugV5ST7VLK7TReVWxjg20P+/LSJ1gkoVxHIMzmN0I4jk2N2/667nSzmkSDSb4jTyOjdcOlCgWywIDOITT"
timestamp := 1598300292178
rawPassword := "testpassword123"
encryptedPassword,err := EncryptPassword(encryptionKey,rawPassword,timestamp)
if err != nil {
fmt.Errorf("Error occurred,while encrypting the password. Error:",err)
return
}
fmt.Println("Encrypted password:",encryptedPassword)
fmt.Println("")
}
func EncryptPassword(encryptionKey,rawPassword string,ts int) (string,error) {
bytes,err := base64.StdEncoding.DecodeString(encryptionKey)
if err != nil {
fmt.Println("Error encoding the string to binary array: ",err)
return "",err
}
key,err := x509.ParsePKIXPublicKey(bytes)
var pubkey *rsa.PublicKey
pubkey = key.(*rsa.PublicKey)
if err != nil {
fmt.Println("Error while generating the key:",err
}
var passwd string
passwd = rawPassword + "|" + strconv.Itoa(ts)
encrypted_password,err := rsa.EncryptPKCS1v15(rand.Reader,pubkey,[]byte(passwd))
if err != nil {
fmt.Println("Error while encrypting the password:",err
}
return base64.StdEncoding.EncodeToString(encrypted_password),nil
}
按照指示从/session/encryptionKey
的{{1}}用加密密钥调用EncryptPassword()。
它返回某种加密的密码,但是对IG.COM API的进一步调用会以 401未经授权:
password + "|" + timestamp
JavaScript中的示例实现:https://github.com/wagerfield/ig-api/blob/102d97647a13e921f473d8287fd17f896ce3fdf1/src/utils.js#L29
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)