github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/security/rsa/rsa_test.go (about)

     1  /*
     2  	参考链接:
     3  	1、http://blog.studygolang.com/2013/01/go%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E4%B9%8Brsa/
     4  	2、http://studygolang.com/articles/5257
     5  */
     6  package rsa
     7  
     8  import (
     9  	"testing"
    10  
    11  	"strings"
    12  )
    13  
    14  const (
    15  	privateKey = `-----BEGIN RSA PRIVATE KEY-----
    16  MIIBOQIBAAJAZ3/rkUodqiNuKtGGsJvo68HzDPCMjQYjD0VpaAclwQFL0s7uPUPL
    17  G6qnLg37wweLiamH16hxA4EJfmiK7Uh5oQIDAQABAkAMQBLUzo32Tl1CyiwECWAn
    18  T3yCIpKwOnK54wBX5MiuMF77Rn7ktJqgDINvx37GegNsHpoS7R0EzP+WkHuP5rJ1
    19  AiEAwVbyh23um1kzObks3aicgDj3Umq3MCssYgo3DlnfcA8CIQCJCxvcGA3CIw9j
    20  SDqzcLGKb69D3PrCg7Y6whwYy/fLTwIhALJjfDGTMCZsPkSTZB89NPFmHmUQC+hI
    21  3ZG0JSp7qBrnAiBA+4eGYdGEUOOnDETpeXJ2VmchItO1EIeEbS6tg2pIeQIgXIwF
    22  UgtCj4Sr23PgYHs3VTXHfniZCOv2R4HS1epkKks=
    23  -----END RSA PRIVATE KEY-----`
    24  	publicKey = `-----BEGIN PUBLIC KEY-----
    25  MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAZ3/rkUodqiNuKtGGsJvo68HzDPCMjQYj
    26  D0VpaAclwQFL0s7uPUPLG6qnLg37wweLiamH16hxA4EJfmiK7Uh5oQIDAQAB
    27  -----END PUBLIC KEY-----`
    28  	errPrivateKey = `-----BEGIN RSA PRIVATE KEY-----
    29  MIIBOQIBAAJAZ3/rkUodqiNuKtGGsJvo68HzDPCMjQYjD0VpaAclwQFL0s7uPUPL
    30  G6qnLg37wweLiamH16hxA4E89NPFmHmUQC+hI
    31  3ZG0JSp7qBrnAiBA+4eGYdGEUOOnDETpeXJ2VmchItO1EIeEbS6tg2pIeQIgXIwF
    32  UgtCj4Sr23PgYHs3VTXHfniZCOv2R4HS1epkKks=
    33  -----END RSA PRIVATE KEY-----`
    34  	errPublicKey = `-----BEGIN PUBLIC KEY-----
    35  MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAZ3/rkUodqiNuKtGGsJvo68HzDPCMjQYj
    36  -----END PUBLIC KEY-----`
    37  	errPrivateKey2 = `-----BEGIN RSA PRIVATE KEY-----
    38  MIIBOQIBAAJAZ3/dbUodqiNuKtGGsJvo68HzDPCMjQYjD0VpaAclwQFL0s7uPUPL
    39  G6qnLg37wweLiamH16hxA4EJfmiK7Uh5oQIDAQABAkAMQBLUzo32Tl1CyiwECWAn
    40  T3yCIpKwOnK54wBX5MiuMF77Rn7ktJqgDINvx37GegNsHpoS7R0EzP+WkHuP5rJ1
    41  AiEAwVbyh23um1kzObks3aicgDj3Umq3MCssYgo3DlnfcA8CIQCJCxvcGA3CIw9j
    42  SDqzcLGKb69D3PrCg7Y6whwYy/12TwIhALJjfDGTMCZsPkSTZB89NPFmHmUQC+hI
    43  3ZG0JSp7qBrnAiBA+4eGYqeEUOOnDETpeXJ2VmchItO1EIeEbS6tg2pIeQIgXIwF
    44  UgtCj4Sr23PgYHs3VTXHfniZCOv2R4HS1epkKks=
    45  -----END RSA PRIVATE KEY-----`
    46  	errPublickey2 = `-----BEGIN PUBLIC KEY-----
    47  MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAV2/rkUodqiNuKtGGsJvo68HzDPCMjQYj
    48  D0VpaAclwQFL0s7uPUPLG6qnLg37wweLiamH16hxA4EJfmiK7Uh5oQIDAQWE
    49  -----END PUBLIC KEY-----`
    50  )
    51  
    52  func TestEncrypt(t *testing.T) {
    53  	input := "hello world"
    54  	data, err := Encrypt(input, publicKey)
    55  	if err != nil {
    56  		t.Errorf("Encrypt fail:%v", err)
    57  	}
    58  	actual, err := Decrypt(data, privateKey)
    59  	if err != nil {
    60  		t.Errorf("Decrypt fail:%v", err)
    61  	}
    62  	if !strings.EqualFold(actual, input) {
    63  		t.Errorf("RSA test fail %s to %s", input, actual)
    64  	}
    65  
    66  	input = ""
    67  	data, err = Encrypt(input, publicKey)
    68  	if err != nil {
    69  		t.Errorf("Encrypt fail:%v", err)
    70  	}
    71  	actual, err = Decrypt(data, privateKey)
    72  	if err != nil {
    73  		t.Errorf("Decrypt fail:%v", err)
    74  	}
    75  	if !strings.EqualFold(actual, input) {
    76  		t.Errorf("RSA test fail %s to %s", input, actual)
    77  	}
    78  
    79  	input = "hello world"
    80  	data = "TkNIRnIZESmOdid6j5ObIeTKBUmHMhqzmYp6A2k/8TtKOOmheBv2Ji2ufDxHiC+7KdwKaaWdMnAKXvGuZ1QrP6Q9+i4c8MWSFBfCDuiQXqH6lLXer6k4pq2LUH9TIXg1HQB38Kn3eWElQW7AN/IKdLpM2VMSIy4Rd3SnEOh62ZA="
    81  	actual, err = Decrypt(data, privateKey)
    82  	if err != nil {
    83  		t.Errorf("Decrypt fail:%v", err)
    84  	}
    85  	if strings.EqualFold(actual, input) {
    86  		t.Errorf("RSA test fail %s to %s", input, actual)
    87  	}
    88  
    89  	input = "hello world"
    90  	_, err = Encrypt(input, errPublicKey)
    91  	if err == nil {
    92  		t.Error("test fail")
    93  	}
    94  
    95  	input = "hello world"
    96  	data, err = Encrypt(input, publicKey)
    97  	if err != nil {
    98  		t.Errorf("Encrypt fail:%v", err)
    99  	}
   100  	_, err = Decrypt(data, errPrivateKey)
   101  	if err == nil {
   102  		t.Error("test fail")
   103  	}
   104  
   105  	input = "hello world"
   106  	data, err = Encrypt(input, errPublickey2)
   107  	if err != nil {
   108  		t.Errorf("Encrypt fail:%v", err)
   109  	}
   110  	actual, err = Decrypt(data, errPrivateKey2)
   111  	if err == nil {
   112  		t.Error("test fail")
   113  	}
   114  	if strings.EqualFold(actual, input) {
   115  		t.Errorf("RSA test fail %s to %s", input, actual)
   116  	}
   117  }
   118  
   119  func TestSign(t *testing.T) {
   120  	input := "hello"
   121  	mode := "md5"
   122  	data, err := Sign(input, privateKey, mode)
   123  	if err != nil {
   124  		t.Errorf("Sign fail %v", err)
   125  	}
   126  	actual, err := Verify(input, data, publicKey, mode)
   127  	if err != nil {
   128  		t.Errorf("Sign test fail %v", err)
   129  	}
   130  	if !actual {
   131  		t.Error("Sign test fail")
   132  	}
   133  
   134  	input = "hello"
   135  	mode = "sha1"
   136  	data, err = Sign(input, privateKey, mode)
   137  	if err != nil {
   138  		t.Errorf("Sign fail %v", err)
   139  	}
   140  	actual, err = Verify(input, data, publicKey, mode)
   141  	if err != nil {
   142  		t.Errorf("Sign test fail %v", err)
   143  	}
   144  	if !actual {
   145  		t.Error("Sign test fail")
   146  	}
   147  
   148  	input = ""
   149  	mode = "sha1"
   150  	data, err = Sign(input, privateKey, mode)
   151  	if err != nil {
   152  		t.Errorf("Sign fail %v", err)
   153  	}
   154  	actual, err = Verify(input, data, publicKey, mode)
   155  	if err != nil {
   156  		t.Errorf("Sign test fail %v", err)
   157  	}
   158  	if !actual {
   159  		t.Error("Sign test fail")
   160  	}
   161  
   162  	input = "hello"
   163  	mode = "base64"
   164  	_, err = Sign(input, privateKey, mode)
   165  	if err == nil {
   166  		t.Error("test fail")
   167  	}
   168  
   169  	input = "hello"
   170  	mode = "sha1"
   171  	data, err = Sign(input, privateKey, mode)
   172  	if err != nil {
   173  		t.Errorf("Sign fail %v", err)
   174  	}
   175  	_, err = Verify(input, data, publicKey, "base64")
   176  	if err == nil {
   177  		t.Error("test fail")
   178  	}
   179  
   180  	input = "hello"
   181  	mode = "sha1"
   182  	_, err = Sign(input, errPrivateKey, mode)
   183  	if err == nil {
   184  		t.Error("test fail")
   185  	}
   186  
   187  	input = "hello"
   188  	mode = "sha1"
   189  	data, err = Sign(input, privateKey, mode)
   190  	if err != nil {
   191  		t.Errorf("Sign fail %v", err)
   192  	}
   193  	_, err = Verify(input, data, errPublicKey, mode)
   194  	if err == nil {
   195  		t.Error("Sign test fail")
   196  	}
   197  
   198  	input = "hello"
   199  	mode = "sha1"
   200  	data, err = Sign(input, errPrivateKey2, mode)
   201  	if err == nil {
   202  		t.Error("Sign test fail")
   203  	}
   204  	actual, err = Verify(input, data, errPublickey2, mode)
   205  	if err == nil {
   206  		t.Error("Sign test fail")
   207  	}
   208  	if actual {
   209  		t.Error("Sign test fail")
   210  	}
   211  }