Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
48
Task/RSA-code/Go/rsa-code.go
Normal file
48
Task/RSA-code/Go/rsa-code.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var n, e, d, bb, ptn, etn, dtn big.Int
|
||||
pt := "Rosetta Code"
|
||||
fmt.Println("Plain text: ", pt)
|
||||
|
||||
// a key set big enough to hold 16 bytes of plain text in
|
||||
// a single block (to simplify the example) and also big enough
|
||||
// to demonstrate efficiency of modular exponentiation.
|
||||
n.SetString("9516311845790656153499716760847001433441357", 10)
|
||||
e.SetString("65537", 10)
|
||||
d.SetString("5617843187844953170308463622230283376298685", 10)
|
||||
|
||||
// convert plain text to a number
|
||||
for _, b := range []byte(pt) {
|
||||
ptn.Or(ptn.Lsh(&ptn, 8), bb.SetInt64(int64(b)))
|
||||
}
|
||||
if ptn.Cmp(&n) >= 0 {
|
||||
fmt.Println("Plain text message too long")
|
||||
return
|
||||
}
|
||||
fmt.Println("Plain text as a number:", &ptn)
|
||||
|
||||
// encode a single number
|
||||
etn.Exp(&ptn, &e, &n)
|
||||
fmt.Println("Encoded: ", &etn)
|
||||
|
||||
// decode a single number
|
||||
dtn.Exp(&etn, &d, &n)
|
||||
fmt.Println("Decoded: ", &dtn)
|
||||
|
||||
// convert number to text
|
||||
var db [16]byte
|
||||
dx := 16
|
||||
bff := big.NewInt(0xff)
|
||||
for dtn.BitLen() > 0 {
|
||||
dx--
|
||||
db[dx] = byte(bb.And(&dtn, bff).Int64())
|
||||
dtn.Rsh(&dtn, 8)
|
||||
}
|
||||
fmt.Println("Decoded number as text:", string(db[dx:]))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue