小编Par*_*emp的帖子

Java:使用java.util.Base64和android.util.Base64解码base64字符串时的结果不同

我正在研究客户端/服务器系统,我正在尝试进行一些基本的加密.当我连接到服务器时,我将一个公钥作为转义字符串发送到套接字.我已经验证字符串在两端,换行符和所有字符串都是相同的.

在客户端(Android)上,我能够使用公钥/私钥成功加密和解密密钥(用于测试目的).但是,当尝试将公钥从String解码为byte []时,服务器立即失败,其中:

 java.lang.IllegalArgumentException: Illegal base64 character a
Run Code Online (Sandbox Code Playgroud)

这似乎是荒谬的,因为'a'绝对是一个base64字符,如果我理解正确的话.客户端和服务器使用共享库来处理所有加密,因此代码几乎完全相同.的唯一差别是编码/解码的base64字符串,由于java.util.Base64是在Android不可用.

共享课程

public abstract class EasyCrypt {

...

    public PublicKey loadPublicKey(String key64) throws GeneralSecurityException {

        byte[] data = decode(key64); //Calls abstract methods, shown below

        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

...

}
Run Code Online (Sandbox Code Playgroud)

客户端(Android)方法

import android.util.Base64;

public class ClientCrypt extends EasyCrypt {
    @Override
    protected byte[] decode(String s) {
        return Base64.decode(s.getBytes(), Base64.DEFAULT); //Works perfectly
    }

    @Override
    protected String encode(byte[] bytes) {
        return Base64.encodeToString(bytes, Base64.DEFAULT); …
Run Code Online (Sandbox Code Playgroud)

java base64 android

27
推荐指数
2
解决办法
2万
查看次数

Mac OSX 上的 VLCJ 链接错误 (darwin/libvlc.dylib)

我正在尝试初始化 VLCJ 以执行一些流式传输,作为我正在开发的应用程序的一部分。按照官方教程,我使用以下代码来尝试加载库:

NativeLibrary.addSearchPath(
    RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC/Contents/MacOS/lib"
    );
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'vlc': JNA native support (darwin/libvlc.dylib) not found in resource path (/Users/iamparker/Documents/workspace/VLCStreamer/target/classes:/usr/jar/vlc/vlcj-3.0.1-javadoc.jar:/usr/jar/vlc/vlcj-3.0.1-sources.jar:/usr/jar/vlc/vlcj-3.0.1-test-sources.jar:/usr/jar/vlc/vlcj-3.0.1-tests.jar:/usr/jar/vlc/vlcj-3.0.1.jar:/usr/jar/vlc/jna-4.1.0.jar:/usr/jar/vlc/jna-platform-4.1.0.jar)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)
at com.sun.jna.Library$Handler.<init>(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:387)
at com.sun.jna.Native.loadLibrary(Native.java:366)
at com.thundercats.vlcstreamer.Main.loadNative(Main.java:33)
at com.thundercats.vlcstreamer.Main.main(Main.java:16)
Run Code Online (Sandbox Code Playgroud)

看起来它甚至没有搜索我给它的路径。该目录中有一个非常好的 libvlc.dylib 。

以下是运行 VLCJ NativeDiscoveryTest 的输出:

vlcj: (Info.java:70)                                 | INFO  | vlcj: <version not available>
vlcj: (Info.java:71)                                 | INFO  | java: 1.6.0_65 Apple Inc.
vlcj: (Info.java:72)                                 | INFO  | java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
vlcj: …
Run Code Online (Sandbox Code Playgroud)

macos libvlc vlcj unsatisfiedlinkerror

5
推荐指数
1
解决办法
4959
查看次数

为什么OpenGL双缓冲似乎在性能方面不一致?

我在OSX上制作一个简单的图形应用程序.我刚开始通过检查帧之间系统时间的差异来监视帧速率.它似乎每隔几帧悬挂一下.

该应用程序在NSTimer对象上运行,目前设置为200 fps(5毫秒帧).为了确保它不仅仅是我的主代码很慢,我注释掉了整个主循环,除了[self.context flushBuffer]; (当然还有帧率采样代码).即使重复这一次调用,也会导致它一次挂起几帧.这是我的控制台输出的示例:

4
5
6
10
5
5
5
4
6
10
5
5
5
5
5
5
20
4
5
6
20
5
5
5
Run Code Online (Sandbox Code Playgroud)

这是每次循环迭代之间的时间(以毫秒为单位).在200帧/秒时,每帧应该约为5毫秒,但它会反复挂起10,15甚至20毫秒.正如你在-initOpenGL函数中看到的那样,Vsyncing被禁用了.

-(void)initOpenGL{
    NSOpenGLPixelFormatAttribute attributes[] = {NSOpenGLPFADoubleBuffer, 0};
    NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes: attributes];
    self.context = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil];
    [self.context setView:[self.window contentView]];
    [self.context makeCurrentContext];

    //Disable Vsync
    int temp = 0;
    [self.context setValues: &temp forParameter: NSOpenGLCPSwapInterval];

    glViewport(0, 0, windowWidth, windowHeight);
    glMatrixMode(GL_PROJECTION);
    glOrtho(0, windowWidth, 0, windowHeight, -1, 100);

    //Flip all textures right …
Run Code Online (Sandbox Code Playgroud)

opengl macos frame-rate objective-c double-buffering

2
推荐指数
1
解决办法
850
查看次数