Tag:

ECDSA签名Java vs Go

我正在尝试学习一些Go和区块链。从ECDSA签名开始。 试图弄清楚如何测试我是否有正确工作的ECDSA签名的Go实现,我想我会尝试在Java中创建一个类似的版本并比较结果,看看我是否可以让它们匹配。 所以Java尝试: public static void main(String[] args) throws Exception { //the keys below are previously generated with “generateKey();” and base64 encoded generateKey(); String privStr = “MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCAQ7bMVIcWr9NpSD3hPkns5C0qET87UvyY5WI6UML2p0Q==”; String pubStr = “MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES8VdACZT/9u1NmaiQk0KIjEXxiaxms74nu/ps6bP0OvYMIlTdIWWU2s35LEKsNJH9u5QM2ocX53BPjwbsENXJw==”; PrivateKey privateKey = base64ToPrivateKey(privStr); PublicKey publicKey = base64ToPublicKey(pubStr); String str = “This is string to sign”; byte[] signature = signMsg(str, privateKey); boolean ok = […]

Java与Golang for HOTP(rfc-4226)

我正在尝试在Golang中实现HOTP(rfc-4226),我正在努力生成有效的HOTP。 我可以在java中生成它但由于某种原因我在Golang中的实现是不同的。 以下是样本: public static String constructOTP(final Long counter, final String key) throws NoSuchAlgorithmException, DecoderException, InvalidKeyException { final Mac mac = Mac.getInstance(“HmacSHA512”); final byte[] binaryKey = Hex.decodeHex(key.toCharArray()); mac.init(new SecretKeySpec(binaryKey, “HmacSHA512”)); final byte[] b = ByteBuffer.allocate(8).putLong(counter).array(); byte[] computedOtp = mac.doFinal(b); return new String(Hex.encodeHex(computedOtp)); } 在Go: func getOTP(counter uint64, key string) string { str, err := hex.DecodeString(key) […]

Java中golang通道的等价物

我有一个要求,我需要从一组阻塞队列中读取。 阻塞队列由我正在使用的库创建。 我的代码必须从队列中读取。 我不想为每个阻塞队列创建一个读者线程。 相反,我想使用单个线程(或者可能最多使用2/3线程)轮询它们的数据可用性。 由于某些阻塞队列可能长时间没有数据,而其中一些阻塞队列可能会获得数据突发。 轮询具有较小超时的队列将起作用,但这根本不是有效的,因为它仍然需要在所有队列上保持循环,即使其中一些队列长时间没有数据。 基本上,我正在寻找阻塞队列的select / epoll(用于套接字)类型的机制。 任何线索都非常感谢。 尽管如此,在Go中这样做很容易。 下面的代码模拟了与channel和goroutines相同的内容: package main import “fmt” import “time” import “math/rand” func sendMessage(sc chan string) { var i int for { i = rand.Intn(10) for ; i >= 0 ; i– { sc = 0; i– { time.Sleep(20 * time.Millisecond) c <- rand.Intn(65534) } i […]