我正在尝试在Java中实现比特币交换Kraken的API.不幸的是,我一直试图执行身份验证以检索私有用户数据.
特别是,我正在玩以下实现: http ://pastebin.com/nHJDAbH8 Kraken API的文档在这里:https://www.kraken.com/help/api
但是,到目前为止我只收到了{"error":["EAPI:Invalid key"]}.我在实现中找不到任何错误,我尝试了几种不同的API密钥.有人可能会快速查看实现并查找代码中的缺陷吗?或者有人成功实施了Kraken API?
非常感谢!
身份验证说明如下:
HTTP-Header:API-Key = API密钥API-Sign =使用HMAC-SHA512(URI路径+ SHA256(nonce + POST数据))和base64解码的秘密API密钥的消息签名
发布数据:nonce =总是增加无符号64位整数otp =双因子密码(如果启用了双因子,否则不需要)注意:在我的情况下,otp被禁用,因此后期数据仅包含随机数.
我正在尝试的实现是:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class KrakenClient {
protected static String key = "myAPIKey"; // API key
protected static String secret = "MySecret===="; // API secret
protected static String url = "api.kraken.com"; // …Run Code Online (Sandbox Code Playgroud) 我正在尝试为某些文本实现AES加密,我正在寻找一种解决方案,最终归结为一个加密和解密密码.我在这个网站上找到了一个可行的解决方案:简单的Java AES加密/解密示例
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Encryptor {
public static String encrypt(String key1, String key2, String value) {
try {
IvParameterSpec iv = new IvParameterSpec(key2.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key1.getBytes("UTF-8"),
"AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(value.getBytes());
System.out.println("encrypted string:"
+ Base64.encodeBase64String(encrypted));
return Base64.encodeBase64String(encrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static String decrypt(String key1, String key2, String encrypted) {
try {
IvParameterSpec iv = …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Java 的 Pusher 库尝试 websockets。
如果互联网连接丢失,Pusher 会自动将其连接状态从“已连接”更改为“已断开”。然而,这似乎只有在断开连接 150 秒后才会发生。这是非常不幸的,因为在这 150 年间,很多消息可能会丢失,而事实上的旧消息仍然可以被视为最新的。
我如何知道最后收到的消息是否是最新的?或者有什么办法可以减少连接状态的超时时间?
这是我正在使用的推送器代码:
import com.pusher.client.Pusher;
import com.pusher.client.channel.Channel;
import com.pusher.client.channel.ChannelEventListener;
import com.pusher.client.channel.SubscriptionEventListener;
import com.pusher.client.connection.ConnectionEventListener;
import com.pusher.client.connection.ConnectionState;
import com.pusher.client.connection.ConnectionStateChange;
public class Testing {
public static void main(String[] args) throws Exception {
// Create a new Pusher instance
Pusher pusher = new Pusher("PusherKey");
pusher.connect(new ConnectionEventListener() {
@Override
public void onConnectionStateChange(ConnectionStateChange change) {
System.out.println("State changed to " + change.getCurrentState() +
" from " + change.getPreviousState());
}
@Override
public void onError(String message, String code, …Run Code Online (Sandbox Code Playgroud)