github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/internal/util/aes_crypto_test.go (about)

     1  package util
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/base64"
     6  	"fmt"
     7  	"testing"
     8  )
     9  
    10  func TestAESEncryptMsg(t *testing.T) {
    11  	appId := "wx45f133bf6fce646e"
    12  	aesKey, err := base64.StdEncoding.DecodeString("AdiqDDDvUNCeE1ZW5XJmjf9fqNBJpGBs4vL4cHKmHBS=")
    13  	if err != nil {
    14  		t.Error(err)
    15  		return
    16  	}
    17  
    18  	random := []byte("cc9632a98304f81c")
    19  	plaintext := []byte(`<xml><ToUserName><![CDATA[gh_b1eb3f8bd6c6]]></ToUserName>
    20  <FromUserName><![CDATA[okPEat9FRX96xG8JQvTxHLpzDV64]]></FromUserName>
    21  <CreateTime>1458889120</CreateTime>
    22  <MsgType><![CDATA[text]]></MsgType>
    23  <Content><![CDATA[tests text message]]></Content>
    24  <MsgId>6265881059295447969</MsgId>
    25  </xml>`)
    26  
    27  	wantBase64Ciphertext := "gsKjKVChgrDDifoOdfrL/MWujrKxnSR1jBopv0zEdHFQXcx5I0bf4UxIRjektLHEziRxpU5zTw0s+gYF3WOFjk" +
    28  		"In30gzQl9XNKr2A+DCHVG05I2EcbOnnAR5EYgjGLAipra5nOfCPPIRFQTZ7SdanniXX73YOiCAKJlNH21+PApcYu4rPXxJ4eTXbBLwmfnS" +
    29  		"l7iojDX1LQIcC3FYmaapMQq/u+sJGsxshp4dLXJ6A5Ji3cSYAzXRVIxbNlHN1MWfdcZ0O5+ZtOU6dZiD8hJ4kkxh05EfOedWFjUy7ZhmXg" +
    30  		"rpZ4WpYPsrythXHE2Bg1Ohz8uf5h5X31yuU/3FPoa8rD21pfZnAjBT1QCkn6MxtL5lR+yoQReLwElVbtB6yJFPIZ+n9Qh/yKfIasxkzgIE" +
    31  		"o0pwPEbS17WCTyvRItJtU6tlo3rawJX+fsV63tKIfmLZjyZPDlV9/ka/nA/DT0KODw=="
    32  
    33  	ciphertext := AESEncryptMsg(random, plaintext, appId, aesKey)
    34  	base64Ciphertext := base64.StdEncoding.EncodeToString(ciphertext)
    35  	if base64Ciphertext != wantBase64Ciphertext {
    36  		t.Errorf("tests AESEncryptMsg failed,\nhave: %s\nwant: %s\n", base64Ciphertext, wantBase64Ciphertext)
    37  		return
    38  	}
    39  }
    40  
    41  func TestAESDecryptMsg(t *testing.T) {
    42  	aesKey, err := base64.StdEncoding.DecodeString("AdiqDDDvUNCeE1ZW5XJmjf9fqNBJpGBs4vL4cHKmHBS=")
    43  	if err != nil {
    44  		t.Error(err)
    45  		return
    46  	}
    47  
    48  	wantRandom := []byte("cc9632a98304f81c")
    49  	wantPlaintext := []byte(`<xml><ToUserName><![CDATA[gh_b1eb3f8bd6c6]]></ToUserName>
    50  <FromUserName><![CDATA[okPEat9FRX96xG8JQvTxHLpzDV64]]></FromUserName>
    51  <CreateTime>1458889120</CreateTime>
    52  <MsgType><![CDATA[text]]></MsgType>
    53  <Content><![CDATA[tests text message]]></Content>
    54  <MsgId>6265881059295447969</MsgId>
    55  </xml>`)
    56  	wantAppId := []byte("wx45f133bf6fce646e")
    57  
    58  	base64Ciphertext := "gsKjKVChgrDDifoOdfrL/MWujrKxnSR1jBopv0zEdHFQXcx5I0bf4UxIRjektLHEziRxpU5zTw0s+gYF3WOFjk" +
    59  		"In30gzQl9XNKr2A+DCHVG05I2EcbOnnAR5EYgjGLAipra5nOfCPPIRFQTZ7SdanniXX73YOiCAKJlNH21+PApcYu4rPXxJ4eTXbBLwmfnS" +
    60  		"l7iojDX1LQIcC3FYmaapMQq/u+sJGsxshp4dLXJ6A5Ji3cSYAzXRVIxbNlHN1MWfdcZ0O5+ZtOU6dZiD8hJ4kkxh05EfOedWFjUy7ZhmXg" +
    61  		"rpZ4WpYPsrythXHE2Bg1Ohz8uf5h5X31yuU/3FPoa8rD21pfZnAjBT1QCkn6MxtL5lR+yoQReLwElVbtB6yJFPIZ+n9Qh/yKfIasxkzgIE" +
    62  		"o0pwPEbS17WCTyvRItJtU6tlo3rawJX+fsV63tKIfmLZjyZPDlV9/ka/nA/DT0KODw=="
    63  	ciphertext, err := base64.StdEncoding.DecodeString(base64Ciphertext)
    64  	if err != nil {
    65  		t.Error(err)
    66  		return
    67  	}
    68  
    69  	random, plaintext, appId, err := AESDecryptMsg(ciphertext, aesKey)
    70  	if err != nil {
    71  		t.Error(err)
    72  		return
    73  	}
    74  	if !bytes.Equal(random, wantRandom) {
    75  		t.Errorf("tests AESDecryptMsg failed,\nhave random: %s\nwant random: %s\n", random, wantRandom)
    76  		return
    77  	}
    78  	if !bytes.Equal(plaintext, wantPlaintext) {
    79  		t.Errorf("tests AESDecryptMsg failed,\nhave plaintext: %s\nwant plaintext: %s\n", plaintext, wantPlaintext)
    80  		return
    81  	}
    82  	if !bytes.Equal(appId, wantAppId) {
    83  		t.Errorf("tests AESDecryptMsg failed,\nhave appid: %s\nwant appid: %s\n", appId, wantAppId)
    84  		return
    85  	}
    86  }
    87  
    88  func TestAEESDecryptData(t *testing.T) {
    89  	aesKey, err := base64.StdEncoding.DecodeString("HogNecGqZeDxFIDGjBwWKw==")
    90  	aesIv, err := base64.StdEncoding.DecodeString("aoZqkfGDWwqj6rFgWdafyw==")
    91  
    92  	base64Ciphertext := "4B9B1aknFM6yQjAh9mFxH3iN4PZXUGfpBLB98CRAVZzNfUI4J1WUur70+NSH/5MXcCidrt44hi6dkByTtRPxrTIV1BOOTvaa2G5NWunTXZJ37/Oq0ezydbDal5v+X3bvVVeFR6MkhYI+hT9xVl2XnE/Bzon2gIq9F9Fy8Yny0VPqsQ95xUyXnN3/IuhiquR1pAgKjDK3kgCoqhUVNa0dRRQQgTNIpy1djbLfyErPXGTXe1qhAj7RvDdJtRloEfg63JgaB/QTR2BLEGT7/GfHnwROfngxa3esGDeBr9Mtav67R4PjYESVFtH2Yf2npaDWAvAMvr+8hNVd2tjy/3HgImctZWo7bh1OHa/ktH4wKYVbTgxZPg/lgTWC+zsl1Z9g07vWQyGpaA11HODDGn1Kdvh6esiY7T3JQ15nKs1rdyXigNQFb9+kicPiInKVfOiuMcGEazli5/UQHF5rnuWhkg/wy+PRbZybR18lLh5d+EW1CnK8gNcQblDJPvx6QFcFhPxr28WkEd7ys0BZQGCIkQ=="
    93  	ciphertext, err := base64.StdEncoding.DecodeString(base64Ciphertext)
    94  	if err != nil {
    95  		t.Error(err)
    96  		return
    97  	}
    98  
    99  	raw, err := AESDecryptData(ciphertext, aesKey, aesIv)
   100  
   101  	fmt.Println(string(raw), err)
   102  	if err != nil {
   103  		t.Error(err)
   104  		return
   105  	}
   106  
   107  }