github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/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 }